我正在尝试使用LeakCanary来检测我的应用程序中的内存泄漏,但它没有比消息“倾倒内存,应用程序将冻结.Brrr。”更进一步。我已经等了大约20分钟左右,但没有变化。这些设备上的行为相同: 1.华硕fonepad 8(Android 5.0股票) 2.索尼Xperia SP(Android 5.1.1 CM 12.1自定义) 3. HTC Desire C(Android 4.4 CM 11自定义)
我在教学中做了一切建议:
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
答案 0 :(得分:42)
如果您使用Android M,则需要授予"写外部存储空间"允许或泄漏金丝雀将持续很长一段时间与brrr消息。在您的应用程序抽屉中,长按发射器以获取泄漏金丝雀(就像您要卸载它一样)并向上拖动到" app info"并打开存储权限。
答案 1 :(得分:-2)
您应该将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 Device Monitor,然后选择“文件资源管理器”选项卡。在目录/ mnt / shell / emulated / 0 / Download / leakcanary / detected_leaks中,您将找到所有堆转储文件。