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

时间:2016-09-12 10:46:46

标签: android

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

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

  • 在服务的onCreate()方法中,将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);
}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

只想对此有所了解。

Android组件无视他们未创建的线程。因此,虽然 IntentService 将处理为使用 onHandleIntent()而创建的线程,但是常规服务将不会关注您自己分叉的任何线程。

一旦服务被销毁,它泄漏的任何线程将继续运行,直到Android终止该过程为止。

如果您的线程意外停止,那与服务无关 - 再次,服务不知道您自己分叉的线程。

答案 2 :(得分:0)

来自参考资料,

以同样的方式退出应用程序,反复按下。有时候,它也会杀死它的后台进程,但有时它不会:

删除最近任务中的条目将终止该进程存在的任何后台进程。它不会直接导致服务停止,但是有一个API可以让他们发现任务被删除以决定他们是否希望这意味着他们应该停止。这样,删除电子邮件应用程序的最近任务不会导致它停止检查电子邮件。

如果您真的想要完全停止某个应用,那么您可以长按最近的任务来转到应用信息,然后点击停止。强制停止是对应用程序的完全终止 - 所有进程都被终止,所有服务都已停止,所有通知都被删除,所有警报都被删除等。在明确请求之前,不允许应用再次启动。

所以基本上,这取决于应用程序的决定,并取决于应用程序的编码方式。值得观看设置>中的屏幕应用>跑步以查看每个应用程序的行为

请查看以下参考链接以获取更多信息。

参考链接: -

http://lifehacker.com/what-happens-when-you-remove-an-app-from-androids-mult-1179868228

http://www.howtogeek.com/169549/what-exactly-happens-when-you-swipe-an-android-app-from-the-recent-apps-list/

https://plus.google.com/+DianneHackborn/posts/GfwRYCC42uX