Я пытаюсь сделать свое приложение, отлично работая над API <23, работая над устройством API 23.
В основном, когда пользователь меняет настройку через меню опций, активность воссоздается с помощью функции rereate (). Теперь, если я медленно нажимаю на параметр меню (так что у меня есть время, чтобы увидеть выделенную опцию), все в порядке, но если я коснусь кратковременно, приложение выйдет из строя.
Я знаю, что это странное поведение, и мне было трудно понять, что вызывает ошибку. Я поставил тайм-аут перед воссозданием (), поэтому, возможно, опция «проверена», но это не сработало. Я могу только думать о какой-то ошибке в API 23, потому что раньше она работала с другими API. Вот фрагмент моего кода (ничего особенного):
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item_1: //... some code goes here recreate(); return true; // some other options .. } return super.onOptionsItemSelected(item); }
И logcat:
10-20 23:12:10.062 3217-3245/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab3d1b80 10-20 23:12:11.050 3217-3245/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4013030 10-20 23:12:11.075 3217-3245/? E/Surface: queueBuffer: error queuing buffer to SurfaceTexture, -19 10-20 23:12:11.075 3217-3245/? E/EGL_emulation: tid 3245: swapBuffers(324): error 0x3003 (EGL_BAD_ALLOC) 10-20 23:12:11.075 3217-3245/? A/OpenGLRenderer: Encountered EGL error 12291 EGL_BAD_ALLOC during rendering 10-20 23:12:11.075 3217-3245/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3245 (RenderThread)
Любая помощь или совет будут очень оценены.
ОБНОВЛЕНИЕ : я определенно думаю, что в API> 23 есть ошибка. После создания нового проекта с пустой активностью и просто добавления внутри onOptionsItemSelected ()
if (id == R.id.action_settings) { recreate(); return true; }
Приложение все еще падает.
Таким образом, мое решение :
Intent intent = getIntent(); finish(); startActivity(intent);
Но перезагрузка не такая гладкая, как при воссоздании () (я вижу немного мигающий).
На самом деле это была ошибка. После того, как я сообщил, это было исправлено Google. Это можно сделать здесь: https://code.google.com/p/android/issues/detail?id=195966