我的 leakcanary 在工作吗?怎么知道?
Is my leakcanary working? How to know?
相信我已经成功安装了LeakCanary。
我将调试、发布和测试依赖项添加到 build.gradle 文件中。
我将必要的文件添加到我的应用程序 Class。必要时导入。已确认应用程序 class 已正确添加到清单中。是否需要显式调用我的应用程序 class?
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
我 运行 我的应用程序在模拟器上,没有发现任何不同之处。我监视 Android 监视器,没有发现任何差异。我怎么知道是否一切正常?我已经分享了我的申请 class。
import android.app.Application;
import android.content.res.Configuration;
import com.squareup.leakcanary.LeakCanary;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
return;
}
LeakCanary.install(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onLowMemory() {
super.onLowMemory();
}
}
Does my application class need to be explicitly called?
没有
How do I know if it's all working?
故意泄露一些东西。例如,将您的启动器 activity 实例分配给 static
字段。
首先,请检查您是否连接到调试器? LeakCanary ignores leak detection when debugging 避免误报。
其次,Add the LeakCanary via Gradle然后执行以下操作:
class App : Application() {
companion object {
@JvmStatic
fun getRefWatcher(context: Context): RefWatcher {
val applicationContext = context.applicationContext as App
return applicationContext.refWatcher
}
}
private lateinit var refWatcher: RefWatcher
override fun onCreate() {
super.onCreate()
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
refWatcher = LeakCanary.install(this)
}
}
在您的片段中(最好使用 BaseFragment)
override fun onDestroy() {
if (BuildConfig.DEBUG) {
activity?.let {
App.getRefWatcher(it).watch(this)
}
super.onDestroy()
}
然后在您的一个带有片段的子活动中执行:
class MemLeakFragment : BaseFragment() {
companion object {
@JvmStatic
lateinit var memleak: Activity
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.let {
memleak = it
}
}
}
用 memleak
片段打开 Activity 并用返回键关闭它。稍等一下,LeakCanary 将报告内存泄漏,这可能需要一段时间...
相信我已经成功安装了LeakCanary。
我将调试、发布和测试依赖项添加到 build.gradle 文件中。
我将必要的文件添加到我的应用程序 Class。必要时导入。已确认应用程序 class 已正确添加到清单中。是否需要显式调用我的应用程序 class?
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
我 运行 我的应用程序在模拟器上,没有发现任何不同之处。我监视 Android 监视器,没有发现任何差异。我怎么知道是否一切正常?我已经分享了我的申请 class。
import android.app.Application;
import android.content.res.Configuration;
import com.squareup.leakcanary.LeakCanary;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
return;
}
LeakCanary.install(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onLowMemory() {
super.onLowMemory();
}
}
Does my application class need to be explicitly called?
没有
How do I know if it's all working?
故意泄露一些东西。例如,将您的启动器 activity 实例分配给 static
字段。
首先,请检查您是否连接到调试器? LeakCanary ignores leak detection when debugging 避免误报。
其次,Add the LeakCanary via Gradle然后执行以下操作:
class App : Application() {
companion object {
@JvmStatic
fun getRefWatcher(context: Context): RefWatcher {
val applicationContext = context.applicationContext as App
return applicationContext.refWatcher
}
}
private lateinit var refWatcher: RefWatcher
override fun onCreate() {
super.onCreate()
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
refWatcher = LeakCanary.install(this)
}
}
在您的片段中(最好使用 BaseFragment)
override fun onDestroy() {
if (BuildConfig.DEBUG) {
activity?.let {
App.getRefWatcher(it).watch(this)
}
super.onDestroy()
}
然后在您的一个带有片段的子活动中执行:
class MemLeakFragment : BaseFragment() {
companion object {
@JvmStatic
lateinit var memleak: Activity
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.let {
memleak = it
}
}
}
用 memleak
片段打开 Activity 并用返回键关闭它。稍等一下,LeakCanary 将报告内存泄漏,这可能需要一段时间...