android-lifecycle - RoboSpice shouldStop() 真的需要吗?

标签 android-lifecycle android robospice

我想知道是否需要 SpiceManager 的 shouldStop() 方法。我的想法是它应该从 Activity/fragment 中解除绑定(bind)可能的监听器,但是如果 Activity 无论如何都会被杀死,是吗事情?垃圾收集器仍将清理 Activity/fragment ,后台服务仍将单独完成。或者我在这里错了吗?当您忘记后台线程中的某些引用时,Android 真的会泄漏吗?

source code 中有一些(误导性的)评论: 对于 shouldStop()它说它将异步解除绑定(bind),对于shouldStopandJoin()同步地。但是 shouldStop 调用 shouldStopAndJoin,而 shouldStopAndJoin 评论说它主要是一种测试方法。那么我们真的需要在 Activity 的 onStop() 回调中调用 shouldStop 吗?

我问这个是因为我想在应用程序上下文中有一个 spicemanager 实例,它没有处理清理或停止事情的特殊方式。所以我想确定没有泄漏或类似的事情。需要明确的是,不是真正在应用程序上下文中,而是从应用程序上下文启动并管理所有后台内容(如 robospice 请求或位置内容)的自定义“ Controller ”。我正在尝试模拟 MVC 模式,其中所有逻辑都真正独立于仅具有用于更改 UI 的 @Subscribe 方法的 Activity 和 fragment 。

编辑:实际上,如果我从应用程序上下文中调用它,那么它与 Activity 或 Fragment 不同。即使 Activity 或 Fragments 确实泄漏了,Application 也不应该,对吧?

感谢任何评论。

最佳答案

当您忘记后台线程中的某些引用时,Android 真的会泄漏吗?

是的,确实如此。这恰恰是制造泄漏的一种非常好的方法。

那么我们真的需要在 Activity 的 onStop() 回调中调用 shouldStop 吗?

是的,你这样做是为了 1) 防止泄漏,2) 防止你的回调在启动上下文结束后被触发,这会导致崩溃。 但你是对的,javadocs 可能会导致混淆。调用 ShouldStopAndJoin 进行测试(将其视为私有(private) + 测试)并且 shouldStop 是公开的。

即使 Activity 或 Fragments 确实泄漏了,Application 也不应该,对吧?

没错。当应用程序终止时,这意味着整个应用程序进程终止,并且任何东西都不会泄漏到 Java 中的 VM 之外。因此,对于应用程序类,没有办法正确调用 shouldStop,也不需要。

关于android-lifecycle - RoboSpice shouldStop() 真的需要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24146205/

相关文章:

android - 不同屏幕尺寸 Andengine Android 上的 Sprite 尺寸

android - Android SQLite 实现是否通过 SQLiteDatabase.insert() 方法清理输入?

android - 我可以让仪器测试杀死并重新启动应用程序进程吗?

kotlin - GlobalScope 与 LifecycleOwner :CoroutineScope

java - 调用 Url.OpenStream 时出现 Android NetworkOnMainThreadException

android - Android 中的作业管理器

java - RoboSpice 和 ORMLite - 访问数据

android - 使用 Maven 构建失败

android - onSaveInstanceState 当点击 Android 中的后退按钮时

android - 后台持久服务的Activity不会被kill掉