【问题标题】:Android memory usage安卓内存使用
【发布时间】:2012-02-24 09:31:33
【问题描述】:

我正在构建一个 android 应用程序,但我有一些关于 内存使用情况

我需要和使用的大部分数据是存储在 xml 字符串文件中的字符串数组。我使用数组是因为首先最大的数组将包含多达 30 个项目,其次不会通过应用程序进行任何更新、删除或插入项目。 我创建的所有自定义适配器都遵循谷歌的指导方针(快速方式 - 使用持有者类)

当用户在活动之间切换时,根据他所做的选择,不同的数组会加载到列表视图中。

如果每个数组不使用,android 是否会清除每个数组分配的内存?我应该这样做吗? 我还使用MAT 来检查应用程序如何使用内存并检查泄漏等。我认为一切都很好。我还使用了一些 png 图标/图像。 该应用在启动时获得 5MB,随着用户的玩耍而上升和下降至 8.5-9MB。

提前感谢您的帮助!

【问题讨论】:

  • 不使用是什么意思?喜欢没有参考,或者喜欢你的应用程序进入后台?
  • 谢谢!快速回答.. 我认为我的意思是“就像没有参考一样”..因为对于第二种情况,应用程序进入后台并且 Android 控制..
  • 好吧,如果在java中没有对某物的引用,那么垃圾收集器会早晚释放空间

标签: android arrays string


【解决方案1】:

如果需要内存,Android 操作系统可能会终止您在堆栈上的活动(没有焦点)。当您的 Activity 以这种方式被杀死时,onSaveInstanceState(Bundle outState) 会被调用。你应该把你的字符串数组保存在这里。

当在您的 Activity 中调用 onCreate(Bundle savedInstanceState) 时,如果 savedInstanceState 不为 NULL,则表示您的 Activity 之前已被操作系统杀死,您需要从该捆绑包中重新填充您的字符串数组。

例如:

String [] stringArray;
...

protected void onCreate(Bundle savedInstanceState)
{
    if (savedInstanceState != null)
    {
        stringArray = savedInstanceState.getStringArray("some_key");
    }
}

protected void onSaveInstanceState (Bundle outState)
{
    super.onSaveInstanceState(outState);
    outState.putStringArray("some_key", stringArray);
}

这里有更详细的描述:http://developer.android.com/reference/android/app/Activity.html

【讨论】:

  • 感谢您这么快的回复。我会在今天下午尝试上述内容,我会回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2012-06-29
  • 2011-12-13
  • 2011-01-09
  • 1970-01-01
  • 2011-07-04
相关资源
最近更新 更多