在应用运行时保留HashMap数据 - Android

时间:2014-03-19 17:27:32

标签: java android hashmap data-storage

我有一个HashMap,其中包含与特定Activity相关的数据。 数据应该从服务器获取并且非常大,所以我不想在某个Activity内部获取它。相反,我将主活动中的所有数据提取到一个自定义类中,然后创建一个HashMap来保存所有对象并将其保存在我的Application类中。

当用户进入另一个活动时,通过调用我之前从Application类创建的HashMap,数据准备就绪,无需等待。

除非有些时候应用程序在后台运行很长时间,所以一切正常,存储在HashMap中的数据正在由Android初始化。

我已经读过在Apllication类中存储对象很糟糕,我无法避免这个错误,所以我的问题是进行该过程的正确方法是什么? 我需要一个能让我的HashMap对象保持活着的解决方案,只要有我的应用程序的实例。

3 个答案:

答案 0 :(得分:2)

I have a HashMap which contains data that is relevant to a specific Activity.

如果是这种情况,为什么不想将HashMap作为实例变量保留在您的活动中?在Activity对象中存储特定Application的数据并不是一个好的面向对象设计。

如果您需要在销毁和创建HashMap时将数据保留在Activity中,您可以将其保存在onSaveInstanceState()

答案 1 :(得分:0)

其中一种可行的方法是使用"无头"保留Fragment以将HashMap数据保留在Activity个娱乐中。根据{{​​3}}这样的Fragment生命周期完全不同:

  • onDestroy()将不会被调用(但onDetach()仍然会被调用,因为片段正在与其当前活动分离。)
  • onCreate (Bundle)将不会被调用,因为片段没有被重新创建。
  • 仍将调用
  • onAttach (活动)和onActivityCreated(Bundle)。

因此,当您的Activity因配置更改而死亡等等时,您的Fragment却没有。重新创建Activity后,它可以请求您保留Fragment一段"缓存&#34}。数据。 android docs,如果您愿意这样做。

我能想到的另一种方法是将数据缓存在数据库或文件中,但我想这可能是一种过度杀伤。

答案 2 :(得分:0)

  

数据应该从服务器获取并且非常大,所以我不这样做   想要在某个活动中获取它。

Mb更好地使用Sqlite进行数据存储,因为Android设备没有无限的资源?