内存管理提示初始化变量?

时间:2016-09-14 21:43:20

标签: android performance android-memory

我正在尝试降低我的应用程序运行到JsonNode的风险,而我目前正专注于将变量初始化作为快速解决方案。 例如,

ObjectNode meta_info = JsonNodeFactory.instance.objectNode();
meta_info.set("field name", student.getName());

每当调用此方法时,每次都会创建这些变量的新实例吗?如果是这样,我什么时候完成它会使它们无效?

我也试过改变变量的范围,但是我需要传递一个上下文(我从方法中得到),而且我不确定如何在全球范围内这样做。

1 个答案:

答案 0 :(得分:1)

也许这不是提供代码解决方案的确切答案,但是您要求在应用程序中处理/检测内存泄漏的一般解决方案,对吗?

Godmaster Jake Wharton发布了一个很好的工具来检测潜在的内存泄漏: 它被称为LeakCanary

在您的应用中集成非常简单! (但要小心,不要将其添加到发布中!!!)

github page上,介绍了如何将LeakCanary集成到您的应用中:

在build.gradle中:

 dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4'
   releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4'
   testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4'
 }

在您的Application类中:

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    LeakCanary.install(this);
  }
}

Sooooo ......但是现在你有泄漏,下一步是什么? 根据我的个人经验,请注意做这样的事情:

  • 尽量避免将Activity或Activity上下文保存为类 会员。如果可能,请始终使用应用程序上下文!
  • 尽量避免通过运行时创建布局!使用xml-layout
  • 对它们进行充气
  • 如果您使用的是EventBus,RxJava / RxAndroid等:请勿忘记取消订阅工具/ framworks / provider 使用。如果在活动进入后没有取消订阅 onPause()onStop()
  • 如果您真的害怕在方法中创建变量,请尽量避免在方法顶部创建所有变量,在需要时创建它们!在Java中,你没有取消/终止它们!这就是为什么你有垃圾收集!