【问题标题】:Android cache background process is increasing continuouslyAndroid缓存后台进程不断增加
【发布时间】:2015-05-25 11:13:30
【问题描述】:

在我的名为“PriceDekho”的 Android 应用程序中,缓存后台进程占用了太多空间。 首先,当我启动应用程序时,应用程序占用了 30MB 左右(我认为还可以),但问题是当我浏览应用程序页面时,这个大小会不断增加到(200 MB)。此应用程序“缓存后台进程”也随移动 RAM 大小而变化。如果移动 RAM 大小为 2GB,则此应用程序“缓存后台进程”大小可达 500 到 700 MB。

我的应用程序只有 5 到 6 个屏幕。我只需要稳定缓存的背景大小。

如何清除应用程序缓存大小?请帮忙。

【问题讨论】:

  • 您的清单中有android:largeHeap="true" 吗?您使用的是 NDK 编译的代码吗?您的正常堆限制应该小于 186MB,所以我不确定您是如何分配这么多 RAM 的。您可以使用procstats 了解更多信息:android-developers.blogspot.com/2014/01/…
  • @CommonsWare 是的,我正在使用 android:largeHeap="true" 属性。不使用 NDK 编译的代码。而且我不知道为什么这个尺寸会不断增加。 186MB 只是一个例子,大小可达 300 MB。我没有在我的代码中执行与 RAM 管理相关的任何操作。请建议我如何减少缓存 RAM 大小
  • 在堆转储上使用 MAT 以查看堆空间周围浮动的内容。请重新考虑您对android:largeHeap="true"的使用。
  • 我需要删除 android:largeHeap="true" 吗?我添加它只是为了在应用程序需要时为应用程序分配更多内存
  • "我需要删除 android:largeHeap="true" 吗?" -- 你的用户会很感激的。

标签: java android caching memory-management memory-leaks


【解决方案1】:

听起来您有垃圾收集器无法删除的内存泄漏。例如,如果您需要从一个从未在此处发布的非上下文类中引用Context。大多数情况下,Android Studio 会指出这些,但您可以尝试使用 LeakCanary 并搜索它们。

添加依赖

dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
 }

并在您的 Application 课程中使用它。如果您还没有,请创建一个。

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    if (LeakCanary.isInAnalyzerProcess(this)) {
      // This process is dedicated to LeakCanary for heap analysis.
      // You should not init your app in this process.
      return;
    }
    LeakCanary.install(this);
    // Normal app init code...
  }
}

【讨论】:

  • 有时它会挂起我的应用程序,并且我的屏幕上会出现一个非常烦人的弹出窗口
【解决方案2】:

缓存后台进程肯定会随着 RAM 大小而变化,因为如果有更多可用内存,系统将允许缓存更多数据。

但是,应用程序的内存使用增加模式可能是由于内存泄漏或在后台创建了巨大的对象。垃圾收集器不是全天候的朋友,并且可能倾向于忽略由于程序错误导致的内存泄漏。

由于没有发布代码供审查,所以要问一些琐碎的问题:

  • 是否有大量使用位图进行的图像处理?如果是,这些位图是否被回收?

  • 您的应用程序是否明智地使用上下文,即避免使用应用程序上下文,除非需要?

  • 监听器是否被取消注册(如果有的话)?

    如上所述,LeakCanary 在这种情况下肯定会非常有用,肯定比 Android 监视器更有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多