I have a report of badtokenexception and I am not being able to reproduce it despite anything I try and it is not clear for me how it can happen.
BadTokenException (@android.view.ViewRootImpl:setView:575) via (@android.view.WindowManagerGlobal:addView:272) FULL TRACE: android.view.WindowManager$BadTokenException: Unable to add window – token android.os.BinderProxy@e5346b6 is not valid; is your activity running? at android.view.ViewRootImpl.setView(ViewRootImpl.java:575) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:306) at android.support.v4.app.DialogFragment.onStart(SourceFile:416) at android.support.v4.app.Fragment.performStart(SourceFile:2369) at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1458) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(SourceFile:1740) at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1809) at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(SourceFile:3217) at android.support.v4.app.FragmentManagerImpl.dispatchStart(SourceFile:3176) at android.support.v4.app.FragmentController.dispatchStart(SourceFile:203) at android.support.v4.app.FragmentActivity.onStart(SourceFile:562) at android.support.v7.app.AppCompatActivity.onStart(SourceFile:177) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220) at android.app.Activity.performStart(Activity.java:5993) at android.app.Activity.performRestart(Activity.java:6050) at android.app.ActivityThread.handleWindowVisibility(ActivityThread.java:3453) at android.app.ActivityThread.access$1200(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) 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:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
I have an activity that shows a dialog when starting, usually it works, only a few crashes are being reported on analytics.
public class DialogFragmentWrapperActivity extends AppCompatActivity {
/** Stores an instance of the dialog to be shown. */
private CustomDialogFragment mCustomDialog = null;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String fragmentId = "DialogFragmentWrapperActivity" + String.valueOf(this.hashCode());
if ((savedInstanceState != null) && savedInstanceState.containsKey("id")) {
fragmentId = savedInstanceState.getString("id");
}
mCustomDialog = CustomDialogFragment.newInstance(fragmentId);
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(mCustomDialog, fragmentId);
ft.commit();
}
Do you have some hint how a badtokenexception could happen? The only thing I can think of if when the activity gets closed before ft.commit() is called, so I tried calling finish() before but this did not change anything. Some ideas?