因为使用了AsyncTask 异步线程在线程完成以后的onPostExecute方法里面弹出窗口。
这个时候如果用户在onPostExecute调用之间按了返回按钮,activity已经onDestory了,
那么就会报出android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4479b390 is not valid; is your activity running?
解决方法一在弹出窗口之前用Activity的isFinishing判断一下Activity是否还存在
protected void onPostExecute(Object result) {
if (!isFinishing()) {
showDialog(MY_DIALOG_ID);
}
}
解决方法二在show的时候捕获一下异常
以下是测试验证
运行这个小程序 默数4的时候按返回 如果不加异常捕获或者判断isFinish的话会崩溃。
public class DialogTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Task().execute();
}
private class Task extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//if (!isFinishing()) {
//try {
createAlertDialog().show();
//} catch (Exception e) {
//}
//}
}
}
private AlertDialog createAlertDialog() {
return new AlertDialog.Builder(DialogTestActivity.this).setTitle("fadfasdf")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}).create();
}
}
分享到:
相关推荐
注意:PopupWindow组件的使用问题,PopupWindow是一个阻塞对话框,如果你直接在Activity创建的方法中显示它,则会报错:android.view.WindowManager$BadTokenException:Unable to add window -- token null is not ...
android13 WindowManager-Shell.jar
Android 中 android.view.WindowLeaked的解决办法 按字面了解,Window Leaked大概就是说一个窗体泄漏了,也就是我们常说的内存泄漏,为什么窗体会泄漏呢? 产生原因: 我们知道Android的每一个Activity都有个...
05-07 10:22:50.670: E/AndroidRuntime(22902): android.view.WindowManager$BadTokenException: Unable to add window -- token null is invalid; is your activity running? ``` **解决方法**: - 确保在Activity...
ERROR/AndroidRuntime(888): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@44ef1b68 is not valid; is your activity running? 报错的意思大概就是说...
3.android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 这个错误属于安卓 Native 的错误。该错误通常是因为 Activity 不存在或者已经销毁...
WindowManager属性详解:WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;继承于 ViewGroup.LayoutParams 。 它的内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。
在Android系统中,"悬浮框权限",也称为"悬浮窗权限"或"显示于其他应用上方的权限",是自Android 6.0(API级别23)引入的一项安全特性。这种权限允许应用程序在用户界面的顶层创建窗口,比如我们常见的悬浮通知、小...
在Android系统中,Home键是默认行为,允许用户随时返回主屏幕或切换到其他应用程序。然而,有时开发者可能需要在特定场景下禁用Home键,例如在全屏游戏或者某个重要操作过程中,确保用户不会意外退出。这通常通过`...
在Android开发中,实现类似QQ视频那样的悬浮窗功能,需要用到`WindowManager`接口。`WindowManager`是Android系统服务之一,它允许应用管理窗口并控制它们在屏幕上的位置和显示方式。本篇将深入探讨如何利用`...
在Android开发中,有时我们需要创建一个浮动在其他应用之上的窗口来实现特定功能,比如悬浮播放视频。`WindowManager.addView()`方法就是实现这一目标的关键。本文将深入探讨如何利用`WindowManager`服务和布局参数...
在Android应用开发中,有时我们需要实现一种特殊的功能,即悬浮窗(Floating Window),它可以在其他应用之上显示,常用于提供快捷操作或者实时信息提示。本教程将深入讲解如何使用`WindowManager`服务来创建和管理...
在Android API中,我们主要通过`android.view.WindowManager`接口和`android.view.View`类来实现这一功能。 1. **添加权限**: 在AndroidManifest.xml文件中,我们需要添加两个关键权限: - `android.permission....
import android.view.WindowManager; import android.view.View.OnTouchListener; import android.widget.FrameLayout; import android.widget.ImageView; public class BubbleExplosion extends Activity { ...
在Android开发过程中,`WindowManager.LayoutParams`是一个非常重要的类,它用于配置窗口的各种属性,如位置、大小、类型等。通过本文档,我们将深入探讨`WindowManager.LayoutParams`的所有参数及其详细信息。 ###...
在Android系统中,悬浮窗(通常被称为Floating Window或者Overlay)是一种可以覆盖在其他应用之上的UI元素,允许用户在执行其他任务的同时查看或操作这些窗口。这种功能在很多应用中都有所体现,如音乐播放器的歌词...
在Android开发中,实现“在所有应用上显示View”通常涉及到系统级插件化或Overlay技术,这是一种高级的Android编程技巧,它允许开发者在任何已安装的应用之上添加自定义的UI元素。这样的功能常见于一些浮动小部件、...
WindowManager是Android系统中的一个重要组件,它允许开发者在应用程序中添加、移除或者更新视图到系统的窗口层次结构。在Android应用开发中,WindowManager常用于实现浮动小部件(如通知、对话框)或者自定义的系统...
Android悬浮窗实现原理和WindowManager详解 Android悬浮窗是指在Android系统中,可以悬浮在屏幕上的一种窗口,常见于QQ视频、手机杀毒软件的桌面小助手等应用中。要实现悬浮窗,需要使用WindowManager来管理窗口。...
layoutParams.flags = android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; layoutParams.format = android.graphics.PixelFormat....