Android:Activity Destroy和Thread显示AlertDialog

时间:2012-04-01 07:24:02

标签: android alertdialog

我有一个活动启动一个显示一个AlertDialog的线程。问题是如果活动在该线程显示alertDialog之前被销毁,则会出现应用程序错误(在日志中我读到:您确定活动正在运行吗?)。我可以解决这个问题吗?

编辑:这是线程的核心

@Override
    public void run() {
        String read = "";
        try {
            read = useHttpPost(url);
            parseFeeds(read);
            Log.d("TVD MORE_NEWS0", "Feeds ottenuti dalla stringa JSON");
            message.obj = feeds; // come object inseriamo i feeds scaricati
            message.arg1 = 1;// come arg1 mettiamo 1, per indicare che l'operazione ha avuto successo.
        } catch (NoHttpResponseException e) {
                          //Visual ALertDialog
            message.obj = null;
            message.arg1 = -1;
        } catch (JSONException e) {
            if(e.getMessage().contains("no_comm")){
                                     //Visual ALertDialog
                message.obj = null;
                message.arg1 = -2;
            }
            Log.e("TVD MORE_NEWS1", "Errore durante il parsing JSON:" + e.getLocalizedMessage());
        }
        handler.sendMessage(message);
    }

2 个答案:

答案 0 :(得分:1)

Thread必须检查调用Activity是否还活着。

public class CallingActivity{
  Thread t;

  method(){
    ..
    t = new Thread();
    t.execute();
  }

  onDestroy(){
    t.interrupt();
  }
}

class Thread{
  WeakReference<Handler> handlerRef;

  run(){
    //do my work
    if(!isInterrupted()){
      handlerRef().get().performAction();
    else
      //do nothing
  }
}

另请注意,通过让线程保持活动的处理程序,您引入了潜在的内存泄漏。我建议您在线程中持有WeakReference到Handler,而不是Handler。

答案 1 :(得分:0)

只需在您的destroy方法中检查线程是否已显示警告对话框。

如果线程尚未完成其任务,则意味着线程正在运行,然后您可以手动停止该线程。

这样如果线程正在执行,那么在销毁活动之前它将被停止/取消。