android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4
2015-08-09 14:29
656 查看
android.view.WindowManager$BadTokenException: Unable to add window – token android.os.BinderProxy@438e7108 is not valid; is your activity running?
解决:子Activity启动dialog(或类似操作)引发此错误
解决方法:
AlertDialog.Builder(xxx.this) => AlertDialog.Builder(this.getParent())
或(this)改为(xxx.this)
其他处理方法:
解决方法一在弹出窗口之前用Activity的isFinishing判断一下Activity是否还存在
Java代码 收藏代码
protected void onPostExecute(Object result) {
if (!isFinishing()) {
showDialog(MY_DIALOG_ID);
}
}
解决方法二在show的时候捕获一下异常
以下是测试验证
运行这个小程序 默数4的时候按返回 如果不加异常捕获或者判断isFinish的话会崩溃。
Java代码 收藏代码
public class DialogTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Task().execute();
}
解决:子Activity启动dialog(或类似操作)引发此错误
解决方法:
AlertDialog.Builder(xxx.this) => AlertDialog.Builder(this.getParent())
或(this)改为(xxx.this)
其他处理方法:
解决方法一在弹出窗口之前用Activity的isFinishing判断一下Activity是否还存在
Java代码 收藏代码
protected void onPostExecute(Object result) {
if (!isFinishing()) {
showDialog(MY_DIALOG_ID);
}
}
解决方法二在show的时候捕获一下异常
以下是测试验证
运行这个小程序 默数4的时候按返回 如果不加异常捕获或者判断isFinish的话会崩溃。
Java代码 收藏代码
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应用的性能问题
- Android中用PULL解析XML
- Android中使用友盟时用Ant进行多渠道打包及相关问题
- 使用Android Studio 1.3 版本进行NDK开发 编译运行hello-jni项目及分析
- 【Android基础篇】AutoCompleteTextView和MultiAutoCompleteTextView
- android中Activity.startManagingCursor(cursor)方法详解
- Android Activity 知识点全面总结
- Android工程各个文件夹的功能区别
- android内存优化
- 使用Android Studio 1.3 版本进行NDK开发准备工作
- android 自定义控件中获取属性的三种方式(转)
- Android应用程序(APK)的构建过程
- Android生命周期函数执行顺序
- android 自定义组件-带图片的textView
- Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析
- NavigationView+Toolbar
- Android之SurfaceView
- android4.02在x4412平台编译碰到的问题
- AndroidStudio更换黑色主题方法
- Android Handler的使用(3)