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

Lifetime of the process that spawned a thread

假设我在清单中注册了一个 BroadcastReceiver,但我的应用未激活。因此,将产生新进程,并在该新进程的主线程上触发 BroadcastReceiver 的 onReceive() 方法。

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

我很好奇生成的线程(让我们假设它 运行s 不确定)是否会让进程保持活动状态?考虑到 JVM 它应该,因为 JVM 不会退出,直到有活动的非守护线程。那艺术呢? ART 不是 JVM,它是一个编译器,编译后的应用程序的行为可能会有所不同,比如终止进程并因此终止所有线程,无论它们是否仍然 运行。有人对这种情况有见解吗?

全看运行环境和OS. 代码是编译还是解释都不会影响 process/app.

的杀戮决定

长版:

只是为了澄清一些事情: ART 不是编译器。它是一个运行时环境。 dex2oat 是编译器驱动程序。 如果我正确理解您的场景,广播将传送到 OS,它会启动您的应用程序。在 onReceive 方法中启动一个线程。

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

所以,不用担心编译代码,只要好好地使用 OS(服务?)即可。