您应该将 RefWatcher 添加到您的片段中,就像项目页面上描述的一样:https ://github.com/square/leakcanary
LeakCanary.install()返回一个预配置的 RefWatcher。它还安装了一个 ActivityRefWatcher,它会在调用 Activity.onDestroy() 后自动检测活动是否泄漏。
public class ExampleApplication extends Application {
public static RefWatcher getRefWatcher(Context context) {
ExampleApplication application = (ExampleApplication) context.getApplicationContext();
return application.refWatcher;
}
private RefWatcher refWatcher;
@Override public void onCreate() {
super.onCreate();
refWatcher = LeakCanary.install(this);
}
}
您可以使用 RefWatcher 来监视片段泄漏:
public abstract class BaseFragment extends Fragment {
@Override public void onDestroy() {
super.onDestroy();
RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
refWatcher.watch(this);
}
}
此外,如果您想在发生内存泄漏时获取堆转储,只需从 Android Studio 中打开 Android 设备监视器,然后选择“文件资源管理器”选项卡。在目录 /mnt/shell/emulated/0/Download/leakcanary/detected_leaks 中,您将找到所有堆转储文件。