Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在应用程序运行时保留HashMap数据-Android_Java_Android_Hashmap_Data Storage - Fatal编程技术网

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

Java 在应用程序运行时保留HashMap数据-Android,java,android,hashmap,data-storage,Java,Android,Hashmap,Data Storage,我有一个HashMap,其中包含与特定活动相关的数据。 数据应该从服务器获取,而且数据非常大,所以我不想在特定的活动中获取数据。相反,我将主活动中的所有数据提取到一个自定义类中,然后创建一个HashMap来保存所有对象,并将其保存在我的应用程序类中 当用户进入另一个活动时,通过调用我先前从应用程序类创建的HashMap,数据就可以无需等待了 除了应用程序长时间处于后台,存储在HashMap中的数据正在被Android初始化外,所有这些都可以正常工作 我已经读到在应用程序类中存储对象是不好的,我无

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

当用户进入另一个活动时,通过调用我先前从应用程序类创建的HashMap,数据就可以无需等待了

除了应用程序长时间处于后台,存储在HashMap中的数据正在被Android初始化外,所有这些都可以正常工作

我已经读到在应用程序类中存储对象是不好的,我无法避免这个错误,所以我的问题是什么是执行该过程的正确方法? 我需要一个解决方案,只要有我的应用程序实例,就可以让我的HashMap对象保持活动状态

I have a HashMap which contains data that is relevant to a specific Activity.
如果是这种情况,为什么不在活动中保留
HashMap
作为实例变量?在
应用程序
对象中存储特定
活动
的数据不是好的面向对象设计


如果在销毁和创建
活动时需要将数据保存在
HashMap
中,可以将其保存在
onSaveInstanceState()
中,可用的方法之一是使用“无头”保留的
片段
活动
保存
HashMap
数据。根据这样的
片段
,其生命周期是完全不同的:

  • onDestroy()将不会被调用(但onDetach()仍然会被调用,因为片段正在从其当前活动中分离)
  • 由于未重新创建片段,因此不会调用onCreate(Bundle)
  • onAttach(活动)和onActivityCreated(捆绑)仍将被调用
因此,当您的
活动
因配置更改等而死亡时,您的
片段
不会死亡。当重新创建
活动
时,它可能会请求保留的
片段
以获取一段“缓存”数据,如果你喜欢这样做

我可以想到的另一种方法是将数据缓存在数据库或文件中,但我想这可能是一种过分的做法

数据应该从服务器获取,而且数据很大,所以我不这么认为 想要在特定的活动中获取它


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

您需要维护序列化捕获以长时间保存数据。实例变量选项:如果用户在第一次打开应用程序时没有导航到该活动,并且在一两天后,当应用程序处于后台时,他想要进入该活动,该怎么办?数据还会存在吗?onSaveInstanceState()选项:我的HashMap包含自定义类对象,如何将其保存在捆绑包中?如果活动已被销毁(即按下后退按钮或应用程序退出),则可以将其保存在onSaveInstanceState()中。如果只是暂停(即按下主页按钮),它仍将在内存中。如果自定义对象实现了Serializable接口,则可以使用putSerializable()将它们存储在捆绑包中。如果我在每个活动上创建应用程序类的实例,该怎么办?它能防止它被破坏吗?应用程序应该是一个单例程序——不要这样做。将我的应用程序从活动切换到片段就像重新编写一样,我宁愿避免它。使用数据库将非常复杂,因为我使用自定义类对象,您不必全部重写它。保留的无头碎片根本不需要显示任何内容。基本上,它可以像一个不可见的容器,在活动中幸存下来,并在应用程序完全没有被破坏的情况下保存数据(而活动可以,而且很多次)。