Activity 已重新启动,但上次启动的线程继续 运行

Activity relaunched, but threads from previous launch continue to run

我遇到了一些非常奇怪的事情。 在用户使用该应用程序的过程中,我正在创建线程并使用 locationManager 来获取位置更新。

现在,如果用户离开应用程序并且 Android 触发 onDestroy 并且用户稍后返回应用程序,我看到旧线程仍然是 运行 和 locationManager仍然触发事件。 当然我可以在 onDestroy 中停止线程和 locationManager(我当然应该这样做),但是如何解释 Android 保持这个状态并且 运行 在它决定终止应用程序之后?

在您最近 window 关闭应用程序之前,该应用程序不会完全关闭。所以你必须在 onDestroy 中停止线程和 locationManager。

希望对您有所帮助!

离开应用程序并不意味着 Android 将关闭所有已启动的线程。在最坏的情况下,你的线程甚至会保留对你的 activity 的引用,使其无法被垃圾收集并最终导致内存泄漏(也许你已经体验过你在另一个应用程序中并且 Android 向你展示"App xy has stopped working")。这是由于您的线程试图更新实际关闭的 activity.

所以最终正确的做法是最迟在 onDestroy() 自己关闭所有线程。