【问题标题】:How to use cached array after reopening app in Android?在Android中重新打开应用程序后如何使用缓存数组?
【发布时间】:2015-03-26 15:35:42
【问题描述】:

这是我的第一次Java编码经验,所以我不得不搜索很多信息,但是我仍然有一个问题。

在我的应用程序中,我必须将一个 4.5 Mb 的数组读入内存。正如我从 Android Studio 的内存监视器中看到的那样,在按下并退出到桌面后它不会被删除。它不会被 GC 删除。我可以在第二次启动时使用相同的阵列吗?指向它的指针(它是 MainActivity 中的全局变量)每次都是空的,所以我必须得到一个新数组。但是前一个没有被删除。如果我没有将指向它的指针设置为 null 并且没有在 onPause() 中调用 System.gc(),则应用程序会因 OOM 而崩溃。我试过putCharArray和getCharArray,还是没用。有没有办法使用相同的数组?还是每次打开应用程序时都必须阅读它?即使在进入设置并从通知栏返回或打开/关闭物理键盘后也会发生这种情况。安卓 4.0.3 AVD。

更新 真可惜,我什至没有考虑过索引。 无论如何,据我所知,Android 有一个应用程序在使用后退按钮关闭后在缓存中。如果我只是创建一个数组,但不要在 onPause 中将其设为 null,则 GC 不会释放内存(正如我在内存监视器中看到的那样)。但在再次打开应用程序后,指针为空,即使我没有将其设为空。有没有办法保存指针并且这个结构不在文件中,并在再次打开应用程序后检查它是否仍在缓存中,以免重新加载文件?不仅在杀死进程之后,甚至只是在例如打开“设置”时将其从屏幕上移开。

【问题讨论】:

  • 为什么要加载一个 4mb 的数组到内存中???

标签: java android arrays garbage-collection char


【解决方案1】:

您可以创建一个数据库并将数据插入其中,以便它可以在启动时加载或将其保存在本地的 sd 存储中的文件中,对于数组,我建议采用这种方式并将数组写入 json 文件:
https://stackoverflow.com/a/14706227/1173391

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2015-05-11
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多