【问题标题】:Android: A good way to store pairs of stringsAndroid:存储字符串对的好方法
【发布时间】:2012-07-13 18:16:11
【问题描述】:

我有一个 Activity,它首先需要在 HashMap 的帮助下根据输入确定输出。我在里面存放了 25 双。

问题是 HashMap 每次活动开始时都会初始化。这让我想到了存储这些对的最佳方式——它们应该在“外部资源”中,还是其他一些解决方案——以使对持久化?

【问题讨论】:

  • 我猜 25 双没什么! )
  • 你的意思是不费吹灰之力?
  • 它被声明为静态的吗?你能欺骗它以某种方式不被垃圾收集吗?为什么内存泄漏在java中很难做到,除非你试图避免它们? :S
  • 如果这些对永远不会改变,那么您可以专门为这 25 个对创建一个 SheredPreferences 文件。当您第一次将它们保存到SharedPreferences 时,您需要遍历HashMap 并单独放置每一对,但可以使用getAll() 方法简单地完成它。也许有点不合常规,但它应该可以工作。
  • 我认为你不应该为此烦恼。只需创建一个私有 HashMap 对象。 25对消耗的内存不多。我不认为使用 SharedPreferences 更好。它们正在处理文件,但您仍然需要分配内存来处理它们的值。

标签: android hashmap


【解决方案1】:

将您的哈希映射中的数据放入一些持久存储中可能不会帮助您在创建活动时绕过初始化哈希映射。如果您的应用程序经常使用此活动,则可能更值得将 Hashmap 作为字段存储在 Application 类中,然后通过应用程序上下文从任何活动访问。

    SampleApplication extends Application{
        private HashMap<String,String> mMap = null;

        public void onCreate(){
            //initialize your hashmap here
            ...
        }

        public getHashMap{
            return this.mMap;
        }
     }

要从项目中的任何活动中获取地图,只需使用以下代码:

    HashMap<String,String> map = ((SampleApplication)getApplicationContext()).getHashMap();

如果您仍需要永久存储数据,您可以选择here 列出的五种方法之一。 HashMap 确实实现了 Serializable,所以如果是我,我可能会使用 SharedPreferences。

EDIT 如果您使用的字符串永远不会改变,Mert 的回答非常棒,只需使用字符串资源即可。但是,如果您需要进行大量操作,那么集合的便利性可能仍然使我的答案中的方法值得。

【讨论】:

    【解决方案2】:

    这取决于如何使用你的字符串..

    如果全部固定且永久,您可以将它们存储在 String XML 中。

    如果您只使用应用程序运行,您可以创建一个类并存储在 ApplicationContext 中。

    您可以保存在文件/sqlite db 或用户设置中。

    【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2014-04-12
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多