我有一个进行异步连接的活动,如下所示:
new Thread(new Runnable() {
public void run() {
try{
//Make Connection
}catch(Exception e){
runOnUiThread(new Runnable() { public void run() {
Dialogs.showErrorDialog(MyActivity.this); //I display an error dialog using this context
} });
}
}
}).start();
想象一下连接真的很慢,我离开了启动这个线程的活动。如果连接最终顺利,一切都很好,但如果连接失败,它会在启动对话框时崩溃,因为上下文不再存在。错误是:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4068a558 is not valid; is your activity running?
如何避免这个错误?我想检测我的活动是否仍然存在
1)显示具有此上下文的对话框(如果我仍在屏幕上)
2) 使用 ApplicationContext 显示 Toast (如果我在屏幕外)
编辑:对话框代码是这样的:
static public void showErrorDialog(Context context){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(R.string.error_title);
builder.setMessage(R.string.error_content);
builder.setPositiveButton(R.string.button_ok,null);
builder.show();
}