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

标签 android multithreading process jvm android-runtime

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

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

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

最佳答案

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

长版:

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

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

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

关于android - 生成线程的进程的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33234629/

相关文章:

multithreading - 我如何让 sbt 在子项目 specs2 运行中使用正确的类加载器?

android - 如何在 Android (Jelly Bean) 中终止一个进程

C进程: fork() scope

android - RippleDrawable 不在 View 上绘制

Android AppBarLayout 折叠工具栏并立即显示稀松布颜色

android - Glide 不为从缓存加载的 ImageView 设置动画

c# - 重定向控制台应用程序的标准输入

android - 如何在 Android View 中实现类似拼字游戏的效果

java - Runnable 中具有 Thread 类型的局部字段

java - 计时器在指定时间后继续