在Android应用程序中处理“不要保持活动”

时间:2012-11-18 10:28:30

标签: android android-activity crash

我有 2个活动活动显示用户信息列表及其子活动,用户可以在其中创建新信息

很明显,从第一个活动开始,我称之为“ startActivityForResult ()”,当用户将他想要的东西放入第二个活动时,我会回到第一个活动,然后我收到“ onActivityResult ()”函数中的信息以保存信息。

我的问题是“不要保持活动”选项。我读到这种情况发生在低内存电话中。但是,当设备关闭活动时,我们如何处理?

在我的示例中,当第二个活动被调用时,第一个被杀死,因此当我们返回到该活动时会发生崩溃,并且我的信息会丢失。

处理这个问题的正确方法是什么?知道我无法在第二个活动中保存我的信息,因为我正在使用文件。

2 个答案:

答案 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中的操作应该尽可能快,不要在那里进行任何复杂的操作。否则,您的应用程序可能看起来已冻结,用户无法与之交互...