我有 2个活动:活动显示用户信息列表及其子活动,用户可以在其中创建新信息
很明显,从第一个活动开始,我称之为“ startActivityForResult ()”,当用户将他想要的东西放入第二个活动时,我会回到第一个活动,然后我收到“ onActivityResult ()”函数中的信息以保存信息。
我的问题是“不要保持活动”选项。我读到这种情况发生在低内存电话中。但是,当设备关闭活动时,我们如何处理?
在我的示例中,当第二个活动被调用时,第一个被杀死,因此当我们返回到该活动时会发生崩溃,并且我的信息会丢失。
处理这个问题的正确方法是什么?知道我无法在第二个活动中保存我的信息,因为我正在使用文件。
答案 0 :(得分:3)
将SharedPreferences用于您的目的。顺便说一句,您可以在关闭活动时使用此技术存储数据。
获取您的班级数据,使用GSON
将其转换为String并存储。
在加载时,只需从SharedPreferences
移动它,然后从String转换回Object。
假设您有MyData
课程,其中包含所有无效信息。
MyData myData = ....;
SharedPreferences mPrefs = context.getSharedPreferences("MyPrefs", 0);
Gson gson = new Gson();
String toStore = gson.toJson(myData);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("stored", toStore);
editor.commit();
....
当您加载以前的活动时:
String loadedMyDataStr = mPrefs.getString("stored", "");
MyData data = gson.fromGson(loadedMyDataStr, MyData.class );
答案 1 :(得分:1)
正如您所说,在onPause
方法调用之后,每个活动都可以被杀死。您可以在onPause
中的第一个活动中存储ListView状态,并将其加载到onResume
中 - 您可以使用单例来实现此目的。
此外,onPause
中的操作应该尽可能快,不要在那里进行任何复杂的操作。否则,您的应用程序可能看起来已冻结,用户无法与之交互...