1

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

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

我很好奇生成的线程(让我们假设它无限期地运行)会使进程保持活力吗?应该考虑 JVM,因为 JVM 在有活动的非守护线程之前不会退出。那么艺术呢?ART 不是 JVM,它是一个编译器,编译后的应用程序的行为可能会有所不同,例如杀死进程并因此杀死所有线程,无论它们是否仍在运行。有人对这种情况有见解吗?

4

1 回答 1

1

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

长版:

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

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

所以,不用担心编译的代码,只需与操作系统(服务?)很好地配合。

于 2015-10-22T02:50:26.960 回答