Android:活动销毁和线程显示警报对话框

Android:活动销毁和线程显示警报对话框,android,android-alertdialog,Android,Android Alertdialog,我有一个活动,它启动一个线程并显示一个AlertDialog。问题是,如果活动在该线程显示alertDialog之前被销毁,则会出现应用程序错误(在日志I中读取:您确定活动正在运行吗?)。我能解决这个问题吗 编辑:这是线程的核心 @Override public void run() { String read = ""; try { read = useHttpPost(url); parseFeeds(r

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

编辑:这是线程的核心

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

在销毁方法中,检查线程是否显示了警报对话框

如果线程尚未完成其任务,则表示线程正在运行,然后您可以手动停止线程


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

线程必须检查调用活动是否处于活动状态

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
  }
}
公共类调用活动{
螺纹t;
方法(){
..
t=新螺纹();
t、 执行();
}
onDestroy(){
t、 中断();
}
}
类线程{
WeakReference handlerRef;
运行(){
//做我的工作
如果(!isInterrupted()){
handlerRef().get().performAction();
其他的
//无所事事
}
}

还请注意,让线程保留活动的处理程序会导致潜在的内存泄漏。我建议您在线程中保留对处理程序的WeakReference,而不是直接调用处理程序。

但如果我调用Thread.stop或invalid,则线程不会停止必须完成其工作的正在进行的线程。。…是的,我已经在我的第一个答案中插入了线程代码。HttpPost()的用途是什么。它是异步任务还是其他什么。