通过滑动从应用程序切换器中删除应用程序时,我注意到一个令人惊讶的行为。该应用程序有一项服务。当应用程序被“杀死”时,任何从服务启动的线程继续运行,其他线程被终止。
真正令人惊讶的是系统可以确定哪些线程是从服务启动的,即使我试图像这样混淆线程的来源:
- 在服务的 onCreate() 方法中,将一个 runnable 发布到主线程处理程序。
- runnable 启动一个新线程,该线程在从最近的线程中删除后仍然存在。
如果我将完全相同的可运行对象发布到完全相同的处理程序,但来自一个 Activity ,则该线程将无法生存。系统怎么可能知道?它是否以某种方式跟踪哪个线程是从哪个线程发布的?
编辑:根据要求,onCreate() 方法:
@Override
public void onCreate() {
super.onCreate();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
new Thread(){
@Override
public void run() {
while (true) {
System.out.println("hello from thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}.start();
}
}, 1000);
}
最佳答案
终于知道是怎么回事了。系统不会选择性地杀死非服务线程,它会杀死整个应用程序,然后再次启动服务,因此看起来服务的线程没有受到影响。
关于android - 当您从最近的任务中删除任务时究竟会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39448588/