【发布时间】:2020-07-10 02:58:00
【问题描述】:
我一直是使用 Leak Canary 2 的用户之一。 多亏了这些东西,我可以修复我的应用程序中的内存泄漏错误。 我最近注意到(我可能迟到了)有更新 Leak Canary 2.2,所以我通过在 Manifest 中添加以下行来将更新版本应用于我的应用程序
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
- 出现问题
在实现泄漏金丝雀之前,我想让它仅在我通过设置在我的应用程序中打开开发人员模式时才开始检测内存泄漏(也安装“泄漏”应用程序)。我将我的应用程序作为 apk 文件共享,以使用户能够轻松测试和发现错误。如果用户安装我的应用程序时突然安装了“泄漏”应用程序,即使他们没有打开开发者模式,他们可能也不知道这个应用程序是什么,实际上,它只对我有用,因为其他用户不会理解这个应用程序在说。但是根据this site,我不需要放任何代码来安装泄漏金丝雀;它将被自动安装。我无法阻止它安装到用户的设备上。
class MainActivity : AppCompatActivity() {
companion object {
var installed = false
@JvmField
var watcher: RefWatcher? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
....
val shared = getSharedPreferences(StaticStore.CONFIG, Context.MODE_PRIVATE)
if (!installed && shared.getBoolean("DEV_MODE", false)) {
watcher = LeakCanary.install(application)
installed = true
}
....
}
}
上面的代码是我在 Leak Canary 2.2 之前执行手动安装的方式。引用自this answer。当应用程序检查来自共享首选项的布尔值 (DEV_MODE) 为真时,它允许安装,并使 watcher 检查其他活动或线程。如果我不调用 LeakCanary.install(application),则不会安装“Leaks”应用程序,因此用户可以使用我的应用程序而不会看到这个额外的应用程序。当然,如果他们打开开发者模式,他们可以使用内存泄漏检测功能。
但是现在没有像 LeakCanaray.install() (也有 RefWatcher )这样的方法,所以我不能像这样执行手动安装之前...
有没有办法在 Leak Canary 2.2 中执行手动安装?
我是否必须放弃让它不自动安装并通知用户“泄漏”应用程序将被安装?
【问题讨论】:
标签: android kotlin leakcanary