我有一个活动启动一个显示一个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);
}
答案 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方法中检查线程是否已显示警告对话框。
如果线程尚未完成其任务,则意味着线程正在运行,然后您可以手动停止该线程。
这样如果线程正在执行,那么在销毁活动之前它将被停止/取消。