0
我有这样的服务(这不是实际的服务,它只是为了描述我的问题)。当Android重新启动服务时,在Android服务中启动的线程会发生什么?
public class UploadService {
private BlockingQueue<UploadData> queue = null;
private UploadInfoReceiver receiver = null;
public void onStart(...) {
queue = new LinkedBlockingQueue<UploadData>();
(new Processor()).start();
// creating and reigtering receiver
}
public void onDestroy() {
queue.add(new ServiceDestroyedData());
// unregistering the receiver
}
private class Processor extends Thread() {
public void run() {
while (true) {
UploadData data = queue.take();
if (data instanceof ServiceDestroyedData) {
return;
}
// processing data
}
}
}
private class UploadInfoReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
queue.add(new UploadData(/* getting data from intent */));
}
}
}
而我的问题是,如果我做我的应用程序是这样的:
然后启动该服务,但是当我将我的应用背景和打开任务管理器(安卓4.2.2),并杀死应用程序,Android重新启动我的服务,我可以看到它创建了一个全新的实例,并且我可以看到onDestroy永远不会被调用以前的服务实例。我也可以看到前一个处理器线程的实例不再运行。怎么会这样?如果onDestroy永远不会被调用如何知道它应该停止我的线程?
感谢您的回答。
正如meredrica所述,如果你强制停止一个应用程序,这个过程实际上只是被杀死,一切都从内存中扯下来。这就是为什么Android在尝试执行时会提供警告的原因,即通常的正常关机不会发生,并且不会调用任何生命周期方法。顺便说一句,这也是为什么任务杀手应用程序是邪恶的,违背了Android的设计原则。 – Squonk