我正在使用AspectJ来检测Android Activity的生命周期。基本上,我有onCreate(Bundle)
和onDestroy()
的切入点,并建议 BEFORE 执行方法。
所以基本上,我计算我有多少活动引用,比如注册表。因此,如果调用onCreate(Bundle)
,我基本上会计算++。如果调用onDestroy()
,我会计算 - 。因此,如果我的计数变为0,则没有任何活动可以被视为我的情况下的应用程序关闭事件。
现在我正在使用一个Timer(已经尝试过java.util.timer和android.os.Handler),它推迟了关闭我的系统的方法的执行。但是,在某些情况下,计时器已启动但从不执行该方法。看起来Android只会杀死整个过程。如果我使用守护程序线程也没关系。没有崩溃,也没有异常,整个过程只是停留在方法的中间。我在调试应用程序时也遇到过这种情况。所以我刚刚达到一个断点和繁荣,这个过程就消失了。
有趣的是,我尝试了没有计时器,在我的方法之前和之后直接放置了一条LogCat消息。没有计时器,没有单独的线程或其他什么。虽然我可以确认该方法被调用,但有时甚至不打印第一个logcat消息。似乎应用程序只是没有任何东西停止。我实际上是一个非常有经验的程序员,所以我现在生命周期如何工作,AspectJ如何工作以及如何正确应用多线程。但这让我很困惑!
也许有人可以帮助我!
答案 0 :(得分:0)
好的,发现我想要实现的目标无法通过这种方式解决。每当从最后一个Activity的UI线程调用onDestroy()
时,线程的关闭过程就已经启动,这意味着线程的looper将在执行该方法后立即退出。在这种情况下,所有计时器都将停止,并且它们也依赖于弯针。这是顺便说一句。文档中也会注明,无论您使用的是java.util.Timer
还是android.os.Handler
,都无关紧要。
守护程序线程也无济于事。 Android强制守护程序线程在进程中没有其他线程时停止。这实际上并不是什么大问题,因为如果应用程序和UI线程消失了,未被杀死的守护程序线程将导致僵尸线程。