坚持“倾倒记忆,app会冻结.Brrr。”消息

时间:2015-07-10 22:22:29

标签: 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);
  }
}

2 个答案:

答案 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中,您将找到所有堆转储文件。

enter image description here