应用程序在内存不足的硬件上失败

时间:2017-03-14 21:20:25

标签: android memory memory-management

我有一个应用程序,我认为它正在工作,直到有人试图在一个内存很少的超便宜的平板电脑上运行它。我确信低内存是问题,但我有两个问题:1)我做了什么消耗内存和2)当我用完时该怎么做。

这是我的应用架构: 我的应用程序包含一个主要活动,它按顺序调用许多附属活动来获取用户输入。在应用程序的生命周期中,每个子活动可能会被调用多次。每个子活动都由startActivityForResult调用调用。当子活动完成它的东西时,它会将任何结果放入Intent并调用finish()。回到主要活动中,onActivityResult检测到子活动已完成,处理返回的数据,然后调用下一个子活动。

我在这里做错了吗?具体来说,当我完成子公司活动后,它的所有数据都会被清除内存吗?如果我再次调用相同的子公司活动,我是否必须做一些特别的事情以避免将活动数据的重复副本加载到内存中?

在低内存系统上运行我的应用程序是我在Android监视器中收到以下消息:

"内存不足。"

然后我看到最多七次"执行停止未恢复的活动" (这是什么意思?)

"此窗口丢失了"

然后另一个"执行停止未恢复的活动"

"启动Activity时出现异常。 Android.os.DeadObjectException" (那是什么?)

"此窗口丢失了"

然后我的应用程序死了。

我的诊断是这是一个记忆问题吗?我的架构会导致内存泄漏吗?我该怎么做才能解决问题?

感谢任何帮助。

亲切的问候 基思

1 个答案:

答案 0 :(得分:0)

  1. adb shell在运行应用程序的高端设备上转储meminfo packagename,第一列最后一行的值是应用程序的消耗。
  2. adb shell在没有app运行的低端设备上转储meminfo,“Free RAM”行后面的值是剩余内存。
  3. 将你的应用程序内存与剩余内存进行比较,可能它们非常接近,然后LMK(lowmemorykiller)会找到你的应用并杀死它。
  4. 要优化记忆,请检查步骤1的结果。