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