Android 处理程序在活动完成之前是否未关闭?
我有一个应用程序,用一个处理程序来显示一个延迟的对话框,这是在几秒钟后对对话框进行延迟发布。我的问题是logcat显示了下一个错误: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
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);
}
谢谢,但我还是不确定这是否合适。我接受意见