我有一个服务启动一个线程和一个Runnable像这样。停止/销毁线程
t = new Thread(new Runnable() {
public void run() {
doSomething();
}
});
t.start();
的原因线程是执行一个异步任务doSomething的()。现在不要担心其他类AsyncTask。我已经尝试过了,它不适合我的情况。编辑:我不能使用AsyncTask,因为它只用于UI线程。这一段代码具有到服务内操作,所以不,不的AsyncTask :(
doSomething的()包含一些外部库,所以我遇到的问题是,它可以潜在地在其中一个命令被悬挂,不返回任何值(因此没有错误检查,甚至可以做到)
要解决这个问题,我会想,在某个时间点,摧毁服务。
stopService(new Intent("net.MyService.intent));
这工作得很好,是很容易在手机上验证,但是,上面创建的线程即使在t时也会继续运行他产生的服务被破坏了。
我正在寻找正确的命令来插入服务的onDestroy()这将清理线程给我。
t.destroy();
t.stop();
都折旧并导致应用程序崩溃。
我把这个代码从某处
@Override
public void onDestroy() {
Thread th = t;
t = null;
th.interrupt();
super.onDestroy();
}
,但它仍然无法正常工作,线程继续运行。任何帮助家伙?
该链接基本上重新迭代我所面临的所有问题和约束。链接讲述如何使用interrupt()代替stop(),这正是我正在做的。 interrupt()的问题是它只能用于sleep(),wait()和join()。在我的代码中,挂起的行不是这些,它从来没有恢复,甚至在一个小时后。线程卡在那条线上,没有中断可以将其解救出来。 – foodman 2011-04-14 09:05:53