我的解决方案是将文件 uri 保存在 SharedPreferences 中并在 onResume 中恢复它。
我遇到了同样的情况:我有一个照片列表,在照片列表中按一个相框会调用android原生相机应用拍照。有时(如 2% 的使用率)从 android 原生相机应用程序返回时,图片并未按预期显示在相框内。我很困惑,无法弄清楚发生了什么。直到我的一位同事在“开发者选项”中设置了“不保留活动”,并且一直遇到该错误,然后我才知道这是活动被杀死的问题。
下面是一些代码来演示我的解决方案:
public static class PhotoOnClickListener implements OnClickListener {
...
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
activity.fileUri[index] = getOutputMediaFileUri(MEDIA_TYPE_IMAGE, "xxxxxx");
activity.saveKeyValue("game_photo_list_file_uri_" + index, activity.fileUri[index].toString());
intent.putExtra(MediaStore.EXTRA_OUTPUT, activity.fileUri[index]);
activity.startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
...
}
private void tryRecoverFromBeingKilledOfLowMemory() {
String s;
for (int i = 0; i < fileUri.length; i++) {
s = readKey("game_photo_list_file_uri_" + i);
if (s != null) {
fileUri[i] = Uri.parse(s);
updatePhoto(i);
}
}
}
@Override
protected void onResume() {
super.onResume();
if (readKey("from_game_main") != null) {
removeKeysPrefixedBy("game_photo_list");
removeKey("from_game_main");
removeKey("uploader_id");
}
tryRecoverFromBeingKilledOfLowMemory();
}
在代码中:
- readKey、saveKeyValue、removeKey、removeKeysPrefixedBy 继承自 CommonActivity,充当 SharedPrefeneces 的通用操作。
- from_game_main 键表示当前恢复正常,应以空照片列表开头。密钥 from_game_main 保存在 GameMainActivity 中的 startActivity 之前。否则,当前的恢复是从被低内存杀死的恢复。
希望能帮助到你。