android - 当您从最近的任务中删除任务时究竟会发生什么?

标签 android

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

真正令人惊讶的是系统可以确定哪些线程是从服务启动的,即使我试图像这样混淆线程的来源:

  • 在服务的 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/

相关文章:

java - 无法解析方法'show(android.support.v4.app.FragmentManager, java.lang.String)

android - 从以前的 Activity 中检测按钮

java - 无法从 AsyncTask android 中的 onPostExecute 将值设置为字符串

android - 如何让数据从一个 Android 应用程序的数据库访问到另一个应用程序?

android - react-native android-run 失败(全新安装)

android - 如何在 fragment 中实现抽屉导航

android - Android 中的自定义 EditText 边框

android - GoogleMap v2 在方向更改时出现崩溃应用程序问题

android - Scala - Android 应用构建失败

android - 使用 Phonegap 在 android 上捕获后使用 FileReader 读取视频文件