android – Activity.showDialog,当活动可能不在前台时

前端之家收集整理的这篇文章主要介绍了android – Activity.showDialog,当活动可能不在前台时前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个活动,在显示进度对话框的同时从后台获取一些数据.当我得到数据(或错误)时,我会忽略该对话框并显示另一个对话框.

如果由于某种原因网站花费太长时间来传送响应(例如15秒),手机将关闭屏幕.现在,当屏幕关闭时,如果我得到响应并尝试显示对话框,则会出现错误(WindowManager $BadTokenException:无法添加窗口 – 令牌android.os.BinderProxy@483fa968无效;是您的活动正在运行?)

这个问题的原因很简单:当屏幕关闭时,另一个活动来到前台(键盘或其他东西).

问题:现在,对于我们知道可能没有运行的活动,最好的方法调用showDialog吗? (活动已创建,但它不是用户正在与之交互的活动…换句话说,它处于停止状态).

我相信如果我点击主页并更改为Home活动,就会发生类似的行为. (虽然我不能在我的特定情况下这样做,因为我的活动将取消请求,一切都会正确关闭).

我不认为这有任何区别,但我在Android 2.1中重现了这一点

解决方法

捕获该异常并使用某种持久存储来保存一个标志,表明您正在等待显示对话框.然后在onResume()中检查该标志,如果它的真实,则显示相应的对话框.也许这样的东西:
try {
    getYourDataFromWeb();
    showDialog()
} catch (BadTokenException e) {
    myPrefsEditor.putBoolean("FailedToShowDialog",true);
    myPrefsEditor.commit();
    e.printStackTrace();
}

然后在你的onResume()方法中这样:

if(myPrefs.getBoolean("FailedToShowDialog",false) == true){
    showDialog();
    myPrefsEditor.putBoolean("FailedToShowDialog",false);
    myPrefsEditor.commit();
}

猜你在找的Android相关文章