2017-09-04 10 views
0

Google PlayでWindowManager $ BadTokenExceptionによって発生した多くのクラッシュレポートが表示されます。

全ログ:

java.lang.RuntimeException: 
    at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3344) 
    at android.app.ActivityThread.-wrap21 (ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1583) 
    at android.os.Handler.dispatchMessage (Handler.java:102) 
    at android.os.Looper.loop (Looper.java:154) 
    at android.app.ActivityThread.main (ActivityThread.java:6121) 
    at java.lang.reflect.Method.invoke (Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:889) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:779) 
Caused by: android.view.WindowManager$BadTokenException: 
    at android.view.ViewRootImpl.setView (ViewRootImpl.java:679) 
    at android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:342) 
    at android.view.WindowManagerImpl.addView (WindowManagerImpl.java:93) 
    at android.app.Dialog.show (Dialog.java:329) 
    at android.app.AlertDialog$Builder.show (AlertDialog.java:1112) 
    at com.nutomic.syncthingandroid.activities.SyncthingActivity.showLoadingDialog (SyncthingActivity.java:142) 
    at com.nutomic.syncthingandroid.activities.SyncthingActivity.onApiChange (SyncthingActivity.java:88) 
    at com.nutomic.syncthingandroid.activities.SyncthingActivity.access$lambda$1 (SyncthingActivity.java) 
    at com.nutomic.syncthingandroid.activities.SyncthingActivity$$Lambda$2.onApiChange (Unknown Source) 
    at com.nutomic.syncthingandroid.service.SyncthingService.onApiChange (SyncthingService.java:530) 
    at com.nutomic.syncthingandroid.service.SyncthingService.updateState (SyncthingService.java:246) 
    at com.nutomic.syncthingandroid.service.SyncthingService.onStartCommand (SyncthingService.java:181) 
    at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3327) 

関連するコード:

if (isFinishing() || mLoadingDialog != null) 
    return; 

LayoutInflater inflater = getLayoutInflater(); 
View dialogLayout = inflater.inflate(R.layout.dialog_loading, null); 
TextView loadingText = (TextView) dialogLayout.findViewById(R.id.loading_text); 
loadingText.setText((getIntent().getBooleanExtra(EXTRA_FIRST_START, false)) 
     ? R.string.web_gui_creating_key 
     : R.string.api_loading); 

mLoadingDialog = new AlertDialog.Builder(this) 
     .setCancelable(false) 
     .setView(dialogLayout) 
     .show(); 

このクラッシュの原因である可能性がありますか?私がクラッシュを再現する方法を持っているなら、それはまた助けになるでしょう。アプリの完全なソースはavailable on Githubです。

答えて

0

オーケー、私は問題を発見:

は、それがバックグラウンドで動作しているかどうかを確認する方法には、いくつかのオプションがあり、ここで働くべきものです。私のコードでは、私は(はるかに複雑な方法で)このような何かをしていた。

if (isFinishing()) 
    return; 
new AlertDialog.Builder(this).show(); 
Thread.sleep(1000); 

show()メソッドの呼び出しが正常に終了しますが、睡眠が終わった後にダイアログが唯一の活動に取り付けました。したがって、この問題がある場合は、メインスレッドで長時間実行されていないことを確認してください。

+0

あなたはそれをどのように解決するのですか? @Nutomic – NullPointerException

+0

@ NullPointerException私は、別のスレッドにブロック操作を移動しました。 – Nutomic

1

このような問題は、アプリが終了しているか、何らかの理由でバックグラウンドになっている場合に発生する可能性があります。 アクティビティが閉じられていないかどうか(たとえば、onDestroyが呼び出されたかどうか)、フォアグラウンド(および表示可能)でアクティブであることを確認する必要があります。

RunningAppProcessInfo myProcess = new RunningAppProcessInfo(); 
ActivityManager.getMyMemoryState(myProcess); 
isInBackground = myProcess.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND; 
+0

ありがとう、私はこれを試してみましょう! – Nutomic

+0

残念ながら、これはまったく役に立ちませんでしたが、クラッシュはまだ発生しています。 Btw私はクラッシュがすべてのAndroidバージョンで表示されていることに気付きました.Google Playは別のバージョンで別々に表示していました。 – Nutomic

+1

これはすべてのバージョンで起こるということを知らせる良いニュースです。再現できるはずです。私はあなたに最善を尽くしました - 私はあなたが関連するコードのブレークポイントでデバッグモードにいる間、あなたがアプリで遊んで、それをバックグラウンドに送る間、それを再現することを試みることをお勧めします。 – yakobom

関連する問題