我在android中遇到了这个问题。我有一个主要活动,他用这个调用线程
Runnable work = new Runnable() {
public void run() {
while (kill) {
try {
Thread.sleep(5000);
connect();
} catch (InterruptedException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
在MainActivity中杀死它的公共布尔值。我能做些什么来保存线程,这样当我恢复活动时,我仍然可以杀死线程?
为什么要终止简历中的线程?
为什么不在恢复部分启动线程,然后放入finally块来处理connect()
被中断的事实,然后当它再次启动时,您只需要重新连接并执行操作。
在移动设备的情况下,最好在您所在的一些持久存储中打勾,这样,如果您被中断,您可以在Activity
再次启动时继续。
你有很高的可能性被打断,所以设计它。
线程可能会被操作系统杀死,所以以后没有什么可以保存和杀死的。
如果你真的需要做这样的事情,那么启动一个RemoteService
,因为它将在与Activity
不同的过程中运行,并且更有可能保持不变。
你可能想看看这个问题:
安卓远程服务
我认为您希望做一些更接近此解决方案建议的事情。
但是,如果您真的想在Thread
中继续这样做,那么我建议您从Thread
扩展一个新类,并添加一个名为killMe()
的方法。这将修改(现在private)布尔kill
标志。然后,在您的onRetainNonConfigurationInstance()
中,您可以返回此Thread
,并可以在onResume
中再次检索它。如果您返回并且活动没有被杀死,那么没关系,您可以在现有的Thread
上调用killMe()
。
示例:
@Override
public Object onRetainNonConfigurationInstance() {
return thread;
}