Ser*_*lov 30 android memory-leaks leakcanary
我正在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
bsa*_*ner 42
如果您使用的是Android M,则需要授予"写入外部存储"权限或泄漏金丝雀将使用brrr消息长时间挂起.在您的应用程序抽屉中,长按发射器以获取泄漏金丝雀(就像您要卸载它一样)并向上拖动到"应用程序信息"并打开存储权限.
小智 -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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 RefWatcher 来监视片段泄漏:
public abstract class BaseFragment extends Fragment {
@Override public void onDestroy() {
super.onDestroy();
RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
refWatcher.watch(this);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您想在发生内存泄漏时获取堆转储,只需从 Android Studio 打开 Android 设备监视器,然后选择“文件资源管理器”选项卡即可。在目录 /mnt/shell/emulated/0/Download/leakcanary/Detected_leaks 中,您将找到所有堆转储文件。
归档时间: |
|
查看次数: |
11730 次 |
最近记录: |