Activity.onDestroy()终止进程



我正在使用AspectJ来为Android活动的生命周期提供工具。基本上,我有onCreate(Bundle)onDestroy()的切入点,并建议它们在执行方法之前执行。

所以基本上,我会计算有多少活动的活动引用,比如注册表。因此,如果调用onCreate(Bundle),我基本上会计算++。如果调用onDestroy(),我会计数--。因此,如果我的计数变为0,那么就没有活动了,在我的情况下,这可以被视为应用程序关闭事件。

现在我使用了一个Timer(已经尝试过java.util.Timer和android.os.Handler),它可以推迟方法的执行以关闭我的系统。但是,在某些情况下,计时器会启动,但从不执行该方法。看起来安卓系统只是扼杀了整个过程。如果我使用守护进程线程也没关系。没有崩溃,没有例外,整个过程只是在一个方法的中间停止。我在调试应用程序时也遇到了这种行为。所以我只是到达了一个断点和繁荣,这个过程已经结束了。

有趣的是,我也尝试了不带计时器的方法,直接在我的方法前后放置LogCat消息。没有定时器,没有单独的线程或其他什么。有时,即使是第一条logcat消息也不会打印出来,尽管我可以确认该方法已被调用。应用程序似乎什么都没做就停了下来。事实上,我是一个经验丰富的程序员,所以我现在了解了生命周期的工作原理,AspectJ的工作原理以及如何正确应用多线程。但这让我很困惑!

也许有人能帮我!

好吧,我发现我想要实现的目标无法通过这种方式解决。每当从上一个"活动"的UI线程调用onDestroy()时,该线程的关闭进程就已经启动,这意味着线程的活套程序将在执行该方法后不久退出。在这种情况下,所有计时器都将停止,因为它们也依赖于活套。顺便说一句,文档中也提到了这一点,无论您使用的是java.util.Timer还是android.os.Handler

守护程序线程也无济于事。当进程中没有其他线程时,Android强制后台进程线程停止。这实际上并不是什么大不了的事,因为如果应用程序和UI线程消失,一个未被杀死的守护进程线程将导致僵尸线程。

最新更新