从最近删除任务时会发生什么?

fhu*_*cho 5 android

我注意到通过滑动从应用切换器中删除应用时出现了令人惊讶的行为.该应用程序有一项服务.当应用程序被"杀死"时,从服务启动的任何线程都会继续运行,其他线程将被终止.

真正令人惊讶的是系统可以确定哪些线程是从服务启动的,即使我试图模糊线程的来源如下:

  • 在服务的onCreate()方法中,将runnable发布到主线程处理程序.
  • runnable启动一个新的线程,可以从最近删除.

如果我将完全相同的runnable发布到完全相同的处理程序但是从一个活动发布,则该线程无法生存.系统怎么可能知道?它是否以某种方式跟踪从哪个线程发布的runnable?

编辑:根据要求,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);
}
Run Code Online (Sandbox Code Playgroud)

fhu*_*cho 2

终于知道是怎么回事了。系统不会有选择地杀死非服务线程,它会杀死整个应用程序,然后再次启动服务,因此看起来服务的线程没有受到影响。