Activity后,Activity中的showDialog会报错,求帮忙...

yarine 2011-11-02 05:02:12
具体情况:

我一个Activity中新开了一个线程去读服务端数据,如果读取失败我会用showDialog提示用户是否重试。但是我如果在showDialog之前就把这个Activity给关了,程序会报错.这个问题肿么解决啊?


错误提示:

11-02 09:02:14.204: ERROR/AndroidRuntime(946): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@43756c40 is not valid; is your activity running?


有什么解决办法么?
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
suzhengu 2011-11-04
  • 打赏
  • 举报
回复
private boolean isActivityRun = true;
private Handler handler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (isActivityRun == false) {
return;
}

@Override
protected void onDestroy() {
super.onDestroy();
isActivityRun = false;
}
yarine 2011-11-04
  • 打赏
  • 举报
回复
再等等,看看有没有人有更好的解决方法,感觉定义标置位太笨了。。。
yarine 2011-11-04
  • 打赏
  • 举报
回复

我找到问题了,首先HandlerThread是没有用的,我测试过。具体原因大家都知道就不扯了。。我的做法还是定义了一个标置位,之前定义的标置位类型我设置成了static,问题就出在了这儿。把static去掉就OK了。这样子标置位只属于每个新开的Activity.
yarine 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fenger8293 的回复:]
一般通信都会放到HandlerThread去实现,错误或者正确都利用消息机制来通知UI线程
[/Quote]

我试过HandlerThread,但是没有用。我还试过在onStop,onDestory,onPause中加加一个标志位,然后根据标志位来决定是否去showDialog,但是还是没有用。
  • 打赏
  • 举报
回复
是啊,像这种线程,可以放HandlerThread里
手指风 2011-11-03
  • 打赏
  • 举报
回复
一般通信都会放到HandlerThread去实现,错误或者正确都利用消息机制来通知UI线程
yarine 2011-11-02
  • 打赏
  • 举报
回复
我知道错误原因的,但是想找一个解决办法.Service不靠谱吧?没必要为了解决这个问题用Service
Shan_zha 2011-11-02
  • 打赏
  • 举报
回复
至于解决方法,你可以尝试用Service去实现吧,因为Service的生命周期可以不依附在activity上
Shan_zha 2011-11-02
  • 打赏
  • 举报
回复
你的activity都关了,上下文应用环境也就没了,也就是context没了,那dialog怎么能显示出来呢? 是吧?呵呵,报错也就是这个原因
yibo2010 2011-11-02
  • 打赏
  • 举报
回复
关闭 Acitivity 之前关闭线程 关闭时候不是调用 distroy 方面吗 在里面可以清掉线程。

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧