我有一个这样的服务(这不是实际的服务,它只是为了描述我的问题)。
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 */));
}
}
}
我的问题是,如果我在我的应用程序中做这样的事情:
if (!isUploadServiceRunning()) {
// start the Service
}
然后它启动服务,但是当我将我的应用程序移到后台并打开任务管理器(android 4.2.2)并终止应用程序时,Android 重新启动我的服务,我可以看到它创建了一个全新的实例,我可以看到 onDestroy 永远不会被先前的 Service 实例调用。而且我还可以看到之前的处理器线程的实例不再运行。怎么会这样?如果 onDestroy 永远不会被调用,Android 怎么知道它应该停止我的线程?
感谢您的回答。