9

私のプロジェクトをAPI 23にアップグレードしましたが、以前は常に動作するコードでエラーが発生しました。私がdialog.dismiss()をSpinnerリスナーに呼び出すと、クラッシュが発生します。このエリアにdismissと電話しないと、クラッシュすることはありません。API 23でダイアログを閉じるときにDeadObjectExceptionが発生する

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. 
+0

2つの提案。ダイアログをヌルにして、ダイアログを閉じる前に表示されているかどうかをチェックします。 また、あなたはonDestroyとonPause/onStopにあるコードを投稿してください。これを呼び出す前に、あなたのこの活動が既に閉鎖されている/破壊されているようです。 – AAnkit

+0

@AnkitAwasthi、私はチェックしました。私は 'dismiss'を呼び出すとダイアログがヌルではなく、アクティビティもnullではありません。ダイアログの 'isShowing()'はtrueを返します。また、onPause/onStop/onDestroyのいずれもアクティビティまたはホスティングフラグメントで呼び出されません。活動は閉鎖/破壊されていません。思考? – NSouth

+1

これは面白いです、あなたは何が起こるか確認するために.dismissの代わりにdialog.cancelを試してみることができますか?また、dialog.dismissの前と後にログラインを追加するだけで、そこにクラッシュすることを確認できます! – AAnkit

答えて

1

par会話のコメントでは、解消/キャンセルはアプリケーションをクラッシュさせないと言いますが、それ以降は別のことです。

あなたのクラッシュログは、アプリケーションがそのメインスレッド上であまりにも多くの仕事をやっても>>言う

アプリケーションコードをチェックして、メインスレッドで長時間実行されていないタスクを実行していないことを確認します。

+0

私のアプリケーションのコードは、ダイアログが閉じられた後に実行されていません(通常実行されているものをコメントアウトしました)。私はこれがSpinnerのonItemSelected()リスナーからの却下を試みることと関係があると考えています。 – NSouth

+0

それはまさに私が疑っているものです。 – AAnkit

+0

@AAnkitので、メインスレッドでの作業を少なくするにはどうすればいいですか? – rxlky

1

正解ではありませんが、回避策が見つかりました。 Spinnerリスナーから退会する代わりに、ボタンを追加しました。ユーザはスピナーから選択し、「適用」をタップする。それは1つの追加のタップですが、少なくともそれは動作します。アプリケーションはデフォルトのダイアログボタンの1つなので、自動的にダイアログを閉じ、すべて正常です。

誰かがSpinnerリスナーからの却下がマシュマロで壊れた理由を知っていれば、私はすべて耳にします。

3

はい、これはMのバグです... しかし、私は解決策を見つけました。 ちょうど~500ミリ秒のデモでハンドラpostDelayedコールを作った

+0

したがって、約500msの遅延でダイアログを閉じるとしますか?これは稼働していますか?誰かが確認できますか? – Nifhel

関連する問題