我是靠谱客的博主 风趣篮球,最近开发中收集的这篇文章主要介绍Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
异常: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();
- }
- }
最后
以上就是风趣篮球为你收集整理的Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)的全部内容,希望文章能够帮你解决Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复