这是今天earlier post的后续内容。如果您创建一个持久性线程(例如,每15秒进行一次网络活动),是否可以在应用程序终止时保证其被销毁?
我认为这个问题可以推广:当Android应用程序死掉时,有什么方法可以保证执行用户或应用程序逻辑?
答案 0 :(得分:0)
在所有非平凡的操作系统上,进程终止在进程的线程请求终止时开始,或者具有适当权限和特权的另一个进程请求终止。
进程终止的第一步是从所有线程中删除执行,无论它们恰好处于什么状态。这对于防止线程为进程分配任何进一步的资源并防止它们主动进行是至关重要的。使用已经分配的rsource。当前未运行的线程将其状态更改为“永不再运行”。在核心上运行的线程由运行它们的核心的硬件中断停止。一旦所有线程都停止,内核就可以开始释放资源,如fd,memory-segments等。
不允许进程外处理运行任何属于该进程的“onTermination”代码。在这样的代码中,即使是简单的无限循环也会阻止进程终止并无限期地占用核心。恶意行为的其他可能性显然是可能的。
这可能导致与其他进程或系统共享的资源出现问题。解决这个问题的一种方法是设计你的应用程序,以便在进程启动时清除任何“遗留”连接,部分编写的文件,共享内存,等等,而不是进程关闭。
系统的设计应使其不会绝对依赖于“干净”关闭,并且可以成功地从关键段错误,进程外终止,电源故障,咖啡溢出和泡沫啤酒罐等事件中恢复。
您的app-lifetime线程将在进程外终止时终止。您可以将它们分离,以便在进行中关闭时终止它们(并且您应该设计为尽可能安全地终止该终止而不依赖任何'onTermination'信号/处理程序/无论如何,因为爆炸啤酒罐确实发生)。