Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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
“处理”;Don';“保持活动”;在android应用程序中_Android_Android Activity_Crash - Fatal编程技术网

“处理”;Don';“保持活动”;在android应用程序中

“处理”;Don';“保持活动”;在android应用程序中,android,android-activity,crash,Android,Android Activity,Crash,我有两个活动:一个活动向用户显示信息列表,以及它的子活动,用户可以在其中创建新信息 很明显,从第一个活动开始,我调用一个“startActivityForResult()”,当用户在第二个活动中输入他想要的内容时,我返回第一个活动,并在“onActivityResult()”函数中接收信息以保存信息 我这里的问题是“不要保留活动”选项。我读到这种情况发生在内存不足的手机上。但是当设备关闭活动时,我们如何处理呢 在我的示例中,当调用第二个活动时,第一个活动被杀死,因此当我们返回到该活动时会发生崩溃

我有两个活动:一个活动向用户显示信息列表,以及它的子活动,用户可以在其中创建新信息

很明显,从第一个活动开始,我调用一个“startActivityForResult()”,当用户在第二个活动中输入他想要的内容时,我返回第一个活动,并在“onActivityResult()”函数中接收信息以保存信息

我这里的问题是“不要保留活动”选项。我读到这种情况发生在内存不足的手机上。但是当设备关闭活动时,我们如何处理呢

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

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

根据您的需要使用。顺便说一下,您可以在关闭活动时使用此技术存储数据

获取类数据,使用
GSON
将其转换为字符串并存储

加载时,只需将其从
SharedReferences
移动,并将其从字符串转换回对象即可

假设您有一个包含所有重要信息的
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 );

正如您所说,在调用
onPause
方法之后,可以随时终止每个活动。您可以将第一个活动的ListView状态存储在
onPause
中,并将其加载到
onResume
中-您可以为此使用单例


另外,您在
onPause
中的操作应该尽可能快,不要在其中执行任何复杂的操作。否则,您的应用程序可能看起来已经冻结,没有用户可以与之交互…

感谢您的回答。我将尝试此代码,因为我找不到任何其他解决方案。但是我对startActivityForResult的使用有一个疑问:如果我们想防止“不保留活动”,我们就不应该使用startActivityForResult并将结果与捆绑包一起发送,对吗?那么,如果使用该函数时出现错误,应该在何处使用它呢?在onStop()之前调用onSaveInstanceState()方法。因此,将对象保存在那里,并通过检查(saveInstanceState!=null){//get back.}