具体情况:我一个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?
有什么解决办法么?

解决方案 »

  1.   

    关闭 Acitivity 之前关闭线程     关闭时候不是调用 distroy 方面吗  在里面可以清掉线程。
      

  2.   

    你的activity都关了,上下文应用环境也就没了,也就是context没了,那dialog怎么能显示出来呢? 是吧?呵呵,报错也就是这个原因
      

  3.   

    至于解决方法,你可以尝试用Service去实现吧,因为Service的生命周期可以不依附在activity上
      

  4.   

    我知道错误原因的,但是想找一个解决办法.Service不靠谱吧?没必要为了解决这个问题用Service
      

  5.   

    一般通信都会放到HandlerThread去实现,错误或者正确都利用消息机制来通知UI线程
      

  6.   

    是啊,像这种线程,可以放HandlerThread里
      

  7.   


    我试过HandlerThread,但是没有用。我还试过在onStop,onDestory,onPause中加加一个标志位,然后根据标志位来决定是否去showDialog,但是还是没有用。
      

  8.   


    我找到问题了,首先HandlerThread是没有用的,我测试过。具体原因大家都知道就不扯了。。我的做法还是定义了一个标置位,之前定义的标置位类型我设置成了static,问题就出在了这儿。把static去掉就OK了。这样子标置位只属于每个新开的Activity.
      

  9.   

    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;
    }