Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 处理程序在活动完成之前是否未关闭?_Android_Handler_Delay_Android Alertdialog - Fatal编程技术网

Android 处理程序在活动完成之前是否未关闭?

Android 处理程序在活动完成之前是否未关闭?,android,handler,delay,android-alertdialog,Android,Handler,Delay,Android Alertdialog,我有一个应用程序,用一个处理程序来显示一个延迟的对话框,这是在几秒钟后对对话框进行延迟发布。我的问题是logcat显示了下一个错误: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@416b42d8 is not valid; is your activity running? at android.view.ViewRootImpl.setVie

我有一个应用程序,用一个处理程序来显示一个延迟的对话框,这是在几秒钟后对对话框进行延迟发布。我的问题是logcat显示了下一个错误:

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@416b42d8 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:281)
at victor.martin.syncro.Finish$1.run(Finish.java:85)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5227)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
at dalvik.system.NativeStart.main(Native Method)
我认为这是因为,应用程序在处理程序完成之前关闭

这是代码,我能做什么

private Runnable alertDialog = new Runnable() {
    public void run() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Finish.this);

    // set the title of the Alert Dialog
alertDialogBuilder.setTitle(getResources().getString(R.string.rebootTitleAlert));

    // set dialog message
    alertDialogBuilder.setMessage(getResources().getString(R.string.rebootMessageAlert)).setCancelable(false).setPositiveButton(getResources().getString(R.string.rebootButtonAlert),new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            RootTools.restartAndroid();
            Finish.this.finish();
        }
    }).setNegativeButton(getResources().getString(R.string.laterButtonAlert), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
            Finish.this.finish();
        }
    });

AlertDialog alertDialog = alertDialogBuilder.create();

    alertDialog.show();

    }
};

如何解决此问题?

在尝试显示对话框之前,您可以检查您的活动是否仍然存在


当您尝试显示对话框(试图将自身附加到活动)但活动不再可用时,会引发错误。

您可以在尝试显示对话框之前检查活动是否仍然存在


当您试图显示对话框(试图将其自身附加到活动)但活动不再可用时,会引发错误。

选项1:删除onStop()中的runnable


选项2:在run方法中,通过调用isFinishing()检查活动是否正在完成,如果为真,则返回并不执行任何操作。

选项1:在onStop()中删除runnable


选项2:在run方法中,通过调用isFinishing()检查活动是否正在完成,如果为真,则返回并不执行任何操作。

我认为,董夏斌的解决方案已经解决了问题

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    // Stop the handler before finish the activity.
    alertDialogHandler.removeCallbacks(alertDialog);
}

谢谢,但我还是不确定这是否合适。我接受意见。

我认为,董夏斌的解决方案已经解决了问题

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    // Stop the handler before finish the activity.
    alertDialogHandler.removeCallbacks(alertDialog);
}
谢谢,但我还是不确定这是否合适。我接受意见