0

我正在使用 AspectJ 来检测 Android 活动的生命周期。基本上,在方法执行之前,我有切入点onCreate(Bundle)onDestroy()建议。

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

现在我正在使用一个计时器(已经尝试过 java.util.timer 和 android.os.Handler),它推迟了一个方法的执行来关闭我的系统。但是,在某些情况下,计时器启动但从不执行该方法。看起来Android只是杀死了整个过程。我是否使用守护线程也没关系。没有崩溃,没有例外,整个事情只是停在一个方法的中间。我在调试应用程序时也遇到了这种行为。所以我刚刚到达一个断点并繁荣,这个过程就消失了。

有趣的是,我也尝试不使用计时器,直接在我的方法前后放置一条 LogCat 消息。没有计时器,没有单独的线程或其他任何东西。尽管我可以确认调用了该方法,但有时甚至不会打印第一条 logcat 消息。似乎该应用程序只是停止而没有任何东西。我实际上是一个非常有经验的程序员,所以我现在了解生命周期是如何工作的,AspectJ 是如何工作的,以及如何正确应用多线程。但这让我很困惑!

也许有人可以帮助我!

4

1 回答 1

0

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

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

于 2013-07-25T08:46:49.167 回答