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()
自己关闭所有线程。
我遇到了一些非常奇怪的事情。 在用户使用该应用程序的过程中,我正在创建线程并使用 locationManager 来获取位置更新。
现在,如果用户离开应用程序并且 Android 触发 onDestroy 并且用户稍后返回应用程序,我看到旧线程仍然是 运行 和 locationManager仍然触发事件。 当然我可以在 onDestroy 中停止线程和 locationManager(我当然应该这样做),但是如何解释 Android 保持这个状态并且 运行 在它决定终止应用程序之后?
在您最近 window 关闭应用程序之前,该应用程序不会完全关闭。所以你必须在 onDestroy 中停止线程和 locationManager。
希望对您有所帮助!
离开应用程序并不意味着 Android 将关闭所有已启动的线程。在最坏的情况下,你的线程甚至会保留对你的 activity 的引用,使其无法被垃圾收集并最终导致内存泄漏(也许你已经体验过你在另一个应用程序中并且 Android 向你展示"App xy has stopped working")。这是由于您的线程试图更新实际关闭的 activity.
所以最终正确的做法是最迟在 onDestroy()
自己关闭所有线程。