android rechtswidrige Ausnahme, wenn-dialog zeigt
Habe ich crash-log:
java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{21f9ba68 V.E..... R.....ID 0,0-1136,402} not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:402)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:328)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:84)
at android.app.Dialog.dismissDialog(Dialog.java:433)
at android.app.Dialog.dismiss(Dialog.java:416)
at ys.a(ConfirmationDialog.java:82)
at ys.a(ConfirmationDialog.java:76)
at **com.smarttech.kapp.SnapshotActivity.onOptionsItemSelected(SnapshotActivity.java:147)**
at android.app.Activity.onMenuItemSelected(Activity.java:3036)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:373)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1222)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:155)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
at android.widget.ActionMenuView.invokeItem(ActionMenuView.java:611)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:197)
at android.view.View.performClick(View.java:5217)
at android.view.View.onKeyUp(View.java:9663)
at android.widget.TextView.onKeyUp(TextView.java:7047)
at android.view.KeyEvent.dispatch(KeyEvent.java:3171)
at android.view.View.dispatchKeyEvent(View.java:8876)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1695)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1695)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1695)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1695)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1695)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2671)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1787)
at android.app.Activity.dispatchKeyEvent(Activity.java:2837)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2549)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4661)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4616)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4174)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4227)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4193)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4303)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4201)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4360)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4174)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4227)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4193)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4201)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4174)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4227)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4193)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4336)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4500)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2607)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2201)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2192)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2584)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:6117)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Dies ist soruce-code zu zeigen, den dialog in snapshot-Aktivität:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.snapshot_delete:
Log.d(TAG, "delete snapshot");
**delete();**
return true;
case R.id.snapshot_share:
export();
return true;
}
return super.onOptionsItemSelected(item);
}
private void delete() {
Log.d(TAG, "Delete snapshot");
final int index = pager.getCurrentItem();
ConfirmationDialog.prompt(this, R.string.delete_snapshot, R.string.delete_snapshot_confirmation, R.string.delete, android.R.string.cancel, new Runnable() {
@Override
public void run() {
snapshots.get(index).delete();
loadSnapshots();
}
});
}
Dieser Absturz ist sehr schwer zu reproduzieren, und es ist alle Informationen Sie, was, die ich habe.
Was ist der Grund dieser Ausnahme?
Und Wie kann es behoben werden?
Ich denke, der Grund ist der thread im dialog, aber ich bin mir nicht sicher,
public static void prompt(final Context context, int titleResourceId, int questionResourceId, int positiveButton, int negativeButton, final Runnable confirmedRunnable, final Runnable cancelledRunnable) {
closeDialog();
DialogInterface.OnClickListener confirmed = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
currentDialog = null;
confirmedRunnable.run();
}
};
DialogInterface.OnClickListener cancelled = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
currentDialog = null;
if (cancelledRunnable != null) {
cancelledRunnable.run();
}
};
};
currentDialog = new AlertDialog.Builder(context).setTitle(titleResourceId).setMessage(questionResourceId).setIcon(android.R.drawable.ic_dialog_alert).setPositiveButton(positiveButton, confirmed)
.setNegativeButton(negativeButton, cancelled).show();
currentDialog.setCancelable(cancelled == null);
currentDialog.setCanceledOnTouchOutside(cancelled == null);
}
Dies ist promt Umsetzung
InformationsquelleAutor der Frage Pein | 2015-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die oberste Ebene in Ihrem stacktrace sagt Ihnen, was falsch ist:
Den Sie anrufen, abweisen, auf einen dialog, der derzeit nicht mehr gezeigt.
Als: Ihre Tätigkeit/Fragment ist möglicherweise bereits zerstört, wenn Sie anrufen, entlassen (-> "not attached to window manager").
[Bearbeiten] Eine Möglichkeit, dies zu beheben, ist zu prüfen, für Aktivität.isFinishing() oder fragment.isAdded()
InformationsquelleAutor der Antwort Ken Van Hoeylandt
Bitte schließen Sie wie folgt vor
InformationsquelleAutor der Antwort Prashanth Debbadwar
Einen einfachen Weg, um sicher zu entlassen, Ihr dialog ist zu prüfen, ob die anzeigen der Dialog enthalten ist, innerhalb der momentan angezeigt wird, bevor Sie versuchen, um Sie zu schließen. Diese sieht wie folgt aus:
InformationsquelleAutor der Antwort degs
Sehe ich keinen Grund, warum das ganze sollte die app Abstürzen, über so etwas wie dieses. Es scheint mir, dass eine Ausnahme an dieser Stelle muss das Ergebnis der Aktivität bereits beendet oder sowas. In jedem Fall, ich vermute, dass die Benutzer nicht auf der Suche an den dialog nicht mehr, also habe ich einfaches Dienstprogramm für das schließen meiner Dialoge zu leise.
InformationsquelleAutor der Antwort Bjørn Stenfeldt
Schlage ich vor, Sie sollten auch prüfen, ob die Aktivität ist nicht null.
InformationsquelleAutor der Antwort Axay Coolmoco
Ich habe das Gleiche Problem,
und ich sove dieses Problem durch die überprüfung von:
InformationsquelleAutor der Antwort