DeadObjectException при отмене диалога в API 23

Я просто обновил свой проект до API 23, и я получаю сообщение об ошибке в коде, который всегда работал раньше. Авария происходит, когда я вызываю dialog.dismiss() в прослушивателе Spinner ниже. Это не сбой, если я не вызываю dismiss в этой области.

 void showWeekViewOptionsDialog() { AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); final View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_weekview_options, null); final MaterialSpinnerCallsSameItemSelected spinner = (MaterialSpinnerCallsSameItemSelected) view.findViewById(R.id.spinner_weekview_days); ArrayAdapter<Integer> dayListAdapter; ArrayList<Integer> dayList = new ArrayList<Integer>(); dayList.add(2); dayList.add(3); dayListAdapter = new ArrayAdapter<Integer>(getActivity(), R.layout.my_spinner_item, dayList); dayListAdapter.setDropDownViewResource(R.layout.my_spinner_dropdown_item); spinner.setAdapter(dayListAdapter); spinner.setSelection(dayListAdapter.getPosition(mWeekViewType)); b.setView(view); final AlertDialog dialog = b.create(); spinner.setOnItemSelectedEvenIfUnchangedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { dialog.dismiss(); // crashes here! } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); dialog.show(); } 

Ниже представлен вывод logcat. Я не знаю, что это значит, заброшенной буферной очередью или с ошибкой DeadObjectException . Из моих исследований, похоже, может быть, объект ссылается на мертвый процесс? Я не понимаю, почему это так, или почему это происходит только в Зефире. Любая помощь приветствуется. Благодаря!

 01-06 17:53:45.791 4436-4485/com.NSouthDomain.NSouthApplication E/Surface: getSlotFromBufferLocked: unknown buffer: 0x9c359200 01-06 17:53:46.066 1278-1303/system_process W/WindowManager: Force-removing child win Window{df5d861 u0 PopupWindow:ac39394} from container Window{d72786b u0 com.NSouthDomain.NSouthApplication/com.NSouthDomain.NSouthApplication.Activity_Main} 01-06 17:53:46.087 941-1963/? E/BufferQueueProducer: [PopupWindow:ac39394] dequeueBuffer: BufferQueue has been abandoned 01-06 17:53:46.089 941-941/? W/SurfaceFlinger: couldn't log to binary event log: overflow. 01-06 17:53:46.090 4436-4485/com.NSouthDomain.NSouthApplication E/EGL_emulation: tid 4485: swapBuffers(322): error 0x3003 (EGL_BAD_ALLOC) 01-06 17:53:46.090 4436-4485/com.NSouthDomain.NSouthApplication A/OpenGLRenderer: Encountered EGL error 12291 EGL_BAD_ALLOC during rendering 01-06 17:53:46.090 4436-4485/com.NSouthDomain.NSouthApplication A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 4485 (RenderThread) 01-06 17:53:46.208 949-949/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 01-06 17:53:46.208 949-949/? A/DEBUG: Build fingerprint: 'Android/sdk_google_phone_x86/generic_x86:6.0/MASTER/2497369:userdebug/test-keys' 01-06 17:53:46.208 949-949/? A/DEBUG: Revision: '0' 01-06 17:53:46.208 949-949/? A/DEBUG: ABI: 'x86' 01-06 17:53:46.208 949-949/? A/DEBUG: pid: 4436, tid: 4485, name: RenderThread >>> com.NSouthDomain.NSouthApplication <<< 01-06 17:53:46.208 949-949/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- 01-06 17:53:46.210 949-949/? A/DEBUG: Abort message: 'Encountered EGL error 12291 EGL_BAD_ALLOC during rendering' 01-06 17:53:46.211 949-949/? A/DEBUG: eax 00000000 ebx 00001154 ecx 00001185 edx 00000006 01-06 17:53:46.211 949-949/? A/DEBUG: esi a2cbf980 edi 0000000b 01-06 17:53:46.211 949-949/? A/DEBUG: xcs 00000073 xds 0000007b xes 0000007b xfs 00000077 xss 0000007b 01-06 17:53:46.211 949-949/? A/DEBUG: eip b7304696 ebp 00001185 esp a2cbf150 flags 00200202 01-06 17:53:46.211 949-949/? A/DEBUG: #00 pc 00083696 /system/lib/libc.so (tgkill+22) 01-06 17:53:46.212 949-949/? A/DEBUG: #01 pc 000815e8 /system/lib/libc.so (pthread_kill+70) 01-06 17:53:46.212 949-949/? A/DEBUG: #02 pc 00027205 /system/lib/libc.so (raise+36) 01-06 17:53:46.212 949-949/? A/DEBUG: #03 pc 000209e4 /system/lib/libc.so (abort+80) 01-06 17:53:46.212 949-949/? A/DEBUG: #04 pc 0000cbc3 /system/lib/libcutils.so (__android_log_assert+128) 01-06 17:53:46.212 949-949/? A/DEBUG: #05 pc 00023759 /system/lib/libhwui.so 01-06 17:53:46.212 949-949/? A/DEBUG: #06 pc 0001e866 /system/lib/libhwui.so 01-06 17:53:46.212 949-949/? A/DEBUG: #07 pc 000216ef /system/lib/libhwui.so 01-06 17:53:46.212 949-949/? A/DEBUG: #08 pc 00027137 /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+151) 01-06 17:53:46.212 949-949/? A/DEBUG: #09 pc 00014aac /system/lib/libutils.so (android::Thread::_threadLoop(void*)+418) 01-06 17:53:46.212 949-949/? A/DEBUG: #10 pc 0006bfee /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+98) 01-06 17:53:46.212 949-949/? A/DEBUG: #11 pc 000141cf /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+122) 01-06 17:53:46.212 949-949/? A/DEBUG: #12 pc 00080a93 /system/lib/libc.so (__pthread_start(void*)+56) 01-06 17:53:46.212 949-949/? A/DEBUG: #13 pc 00021952 /system/lib/libc.so (__start_thread+25) 01-06 17:53:46.212 949-949/? A/DEBUG: #14 pc 000170b6 /system/lib/libc.so (__bionic_clone+70) 01-06 17:53:46.282 949-949/? E/DEBUG: AM write failed: Broken pipe 01-06 17:53:46.282 1278-1298/system_process I/BootReceiver: Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE) 01-06 17:53:46.303 1278-8703/system_process W/ActivityManager: Force finishing activity com.NSouthDomain.NSouthApplication/.Activity_Main 01-06 17:53:46.309 955-955/? I/Zygote: Process 4436 exited due to signal (6) 01-06 17:53:46.319 1278-1320/system_process W/InputDispatcher: channel 'bbdfcc6 com.NSouthDomain.NSouthApplication/com.NSouthDomain.NSouthApplication.Activity_Main (server)' ~ Consumer closed input channel or an error occurred. events=0x9 01-06 17:53:46.319 1278-1320/system_process E/InputDispatcher: channel 'bbdfcc6 com.NSouthDomain.NSouthApplication/com.NSouthDomain.NSouthApplication.Activity_Main (server)' ~ Channel is unrecoverably broken and will be disposed! 01-06 17:53:46.323 1278-1820/system_process D/GraphicsStats: Buffer count: 3 01-06 17:53:46.391 941-941/? E/EGL_emulation: tid 941: eglCreateSyncKHR(1294): error 0x3004 (EGL_BAD_ATTRIBUTE) 01-06 17:53:46.437 1278-1820/system_process I/WindowState: WIN DEATH: Window{bbdfcc6 u0 com.NSouthDomain.NSouthApplication/com.NSouthDomain.NSouthApplication.Activity_Main} 01-06 17:53:46.437 1278-1820/system_process W/InputDispatcher: Attempted to unregister already unregistered input channel 'bbdfcc6 com.NSouthDomain.NSouthApplication/com.NSouthDomain.NSouthApplication.Activity_Main (server)' 01-06 17:53:46.437 1278-8703/system_process W/ActivityManager: Exception thrown during pause android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:503) at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:727) at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:867) at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2907) at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:2763) at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:2755) at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:11971) at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:11867) at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:12556) at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:12063) at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86) 01-06 17:53:46.441 1278-1290/system_process I/ActivityManager: Process com.NSouthDomain.NSouthApplication (pid 4436) has died 01-06 17:53:46.549 1278-3883/system_process I/OpenGLRenderer: Initialized EGL, version 1.4 01-06 17:53:46.584 1595-1904/com.google.android.googlequicksearchbox W/EGL_emulation: eglSurfaceAttrib not implemented 01-06 17:53:46.584 1595-1904/com.google.android.googlequicksearchbox W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa21efb80, error=EGL_SUCCESS 01-06 17:53:46.607 1278-3883/system_process W/EGL_emulation: eglSurfaceAttrib not implemented 01-06 17:53:46.607 1278-3883/system_process W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9dba5180, error=EGL_SUCCESS 01-06 17:53:47.139 1595-1904/com.google.android.googlequicksearchbox W/OpenGLRenderer: Incorrectly called buildLayer on View: em, destroying layer... 01-06 17:53:47.143 1278-1303/system_process W/WindowAnimator: Failed to dispatch window animation state change. android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:503) at android.view.IWindow$Stub$Proxy.onAnimationStopped(IWindow.java:534) at com.android.server.wm.WindowAnimator.updateWindowsLocked(WindowAnimator.java:286) at com.android.server.wm.WindowAnimator.animateLocked(WindowAnimator.java:678) at com.android.server.wm.WindowAnimator.-wrap0(WindowAnimator.java) at com.android.server.wm.WindowAnimator$1.doFrame(WindowAnimator.java:123) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:856) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:603) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61) at com.android.server.ServiceThread.run(ServiceThread.java:46) 01-06 17:53:47.172 1278-1293/system_process I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread. 01-06 17:53:47.192 941-941/? W/SurfaceFlinger: couldn't log to binary event log: overflow. 

Solutions Collecting From Web of "DeadObjectException при отмене диалога в API 23"

Да, это ошибка в M … Но я придумал решение. Просто сделал обработчик postDelayed call с ~ 500 мс deplay

Как говорится в комментариях, вы говорите, что увольнение / отмена не приводит к сбою приложения, но после этого это что-то еще.

В ваших журналах о сбоях говорится >>

Приложение может делать слишком много работы над своей основной нитью.

Проверьте код приложения и убедитесь, что вы не выполняете долгое задание в основном потоке.

Не настоящий ответ, но я нашел обходное решение. Вместо того, чтобы увольнять слушателя Spinner, я добавил кнопку. Теперь пользователь выбирает из счетчика и кранов «Применить». Это один дополнительный кран, но, по крайней мере, он работает. Поскольку приложение является одной из стандартных диалоговых кнопок, оно автоматически отклоняет диалог, и все в порядке.

Если кто-нибудь знает, почему увольнение с прослушивателя Spinner ломается в Зефире, я все уши.