Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)
来源:互联网 发布:2017商务笔记本 知乎 编辑:程序博客网 时间:2024/05/07 14:02
异常:android.view.WindowManager$BadTokenException: Unable to add window — token android.os.BinderProxy@438e7108 is not valid; is your activity running?
因为使用了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();
- }
- }
0 0
- Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)
- Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)
- Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)(dialog总是牺牲)
- is not valid; is your activity running?
- Anroid 异常:is not valid; is your activity running?
- 错误 $LocalActivityRecord@40533030 is not valid; is your activity running?
- Anroid 异常:is not valid; is your activity running?
- Anroid 异常:is not valid; is your activity running?
- token null is not valid; is your activity running?解决方案
- android.view.ViewRoot$W@47e0add0 is not valid; is your activity running?错误分析
- Unable to add window — token android.os.BinderProxy is not valid; is your activity running?
- 运行异常:android.view.WindowManager$BadTokenException:is not valid; is your activity running?
- Unable to add window -- token android.os.BinderProxy@XXX is not valid; is your activity running?
- 关于Android平台上面is not valid; is your activity running?
- Unable to add window -- token android.os.BinderProxy@xxx is not valid; is your activity running
- Unable to add window — token android.os.BinderProxy is not valid; is your activity running?
- 关于android "is not valid; is your activity running?"的bug
- token android.os.BinderProxy@163442e0 is not valid; is your activity running
- 第十六周--英文单词的基数排序
- 第16周—项目1(7)基数排序
- 第七周 项目四 队列数组
- 逻辑卷的管理
- 第十五周 项目1 归并排序
- Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)
- 判断手机终端并自动跳转js代码及使用实例
- 第16周、项目4—英文单词的基数排序
- 字符串结尾字符的含义
- JavaScript在IE浏览器和Firefox浏览器中的差异总结
- 第十六周项目1-基数排序
- 实现可缩放的马赛克控件---Android
- 内存交换
- 第十六周 项目1.6——验证算法