产生线程的进程的生命周期

时间:2015-10-20 10:48:17

标签: android multithreading process jvm android-runtime

假设我在清单中注册了BroadcastReceiver,而我的应用程序未处于活动状态。因此,将生成新进程,并且将在此新进程的主线程上触发BroadcastReceiver的onReceive()方法。

现在,我从onReceive()方法生成一个线程(我知道不推荐使用Service,并且应该使用Service来延长onReceive()的进程生命周期。)

我很好奇产生的线程(让我们假设它运行得非常直接)保持进程活着?考虑JVM,因为JVM在有活动的非守护进程线程之前不会退出。 ART怎么样? ART不是JVM,它是一个编译器,编译应用程序的行为可能不同,例如杀死进程,因此杀死所有线程,无论它们是否仍然运行。有没有人对这种情况有所了解?

1 个答案:

答案 0 :(得分:1)

完全取决于运行时环境和操作系统。 无论是编译还是解释代码都不会影响进程/应用程序的终止决策。

长版:

要清除一些事情: ART不是编译器。它是一个运行时环境。 dex2oat是编译器驱动程序。 如果我正确理解您的场景,则会向操作系统发送广播,从而启动您的应用程序。并在onReceive方法中启动一个帖子。

应用程序可能不是100%AOT compiled。这意味着ART将解释一些部分,而大多数部分将由ART本地执行。 所以ART,也是一个运算符,也有一个解释器。 决定是否终止广播处理程序中的线程,它不依赖于代码是本机执行还是解释。 操作系统可能决定在内存不足时终止进程,或者运行时如果检测到它永远运行则中断执行,等等。

那么,不要担心已编译的代码,只需与OS(服务?)很好地配合。