【问题标题】:Android:Use Of SharedPreference Causes Memory leakAndroid:使用 SharedPreference 导致内存泄漏
【发布时间】:2011-11-24 13:04:36
【问题描述】:

我们的应用程序使用 SharedPreference 来保存数据。应用程序正在从服务器接收大约 1.5Mb 的数据。

解析数据后,我将其存储在 SharedPreference 中。但是保存操作导致堆上大约 2mb 的 Hashmaps(我用内存分析器工具检查过)。那么 sharedPrefs 是在存储时使用堆(我不这么认为)还是在内部使用,编辑器是否没有清除 Map Object 数据字符串? (在 Memory Analyzer 上,数据显示为 HashMap,GC 根指向 SharedPrefs 和 android.app.ContextImpl(android 中的内部或内部类))

另外,使用 sqlite 或 SharedPref 哪个更好?因为有了 sharedPref,应用程序运行得又快又好。我唯一的问题是内存泄漏。

【问题讨论】:

  • 很可能对于大量数据,使用 sql 数据库会产生更快的结果并且会占用更少的内存,尤其是在数据经常更改的情况下。
  • sharedPreferences 将用作跨多次重新启动的小型存储位置。它对存储的大量数据反应不佳……速度也降低了……最好使用 SD 卡中的数据库或文件存储。
  • 感谢我用 sql db 更改了我的代码
  • 这个答案可以帮助您了解如何实施 -> stackoverflow.com/q/6364642/492918

标签: android sql memory-leaks sharedpreferences


【解决方案1】:

好吧,你可以将它存储到一个私人文件中,如果有多个条目,则可以使用分隔符或其他东西。

但是,如果您有很多条目,我猜最好的方法是使用数据库。

以下代码会将字符串保存到文件中:

    public static void WriteSettings(Context context, String data,String filename) {
    FileOutputStream fOut = null;
    OutputStreamWriter osw = null;
    try {
        fOut = context.openFileOutput(filename, Context.MODE_PRIVATE);
        osw = new OutputStreamWriter(fOut);
        osw.write(data);
        osw.flush();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            osw.close();
            fOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-03
    • 2020-10-24
    • 1970-01-01
    • 2013-09-07
    • 2017-04-20
    • 1970-01-01
    • 2017-11-24
    • 2015-07-06
    • 2014-06-07
    相关资源
    最近更新 更多