Android убивает мое приложение всякий раз, когда вызывается startactivityforresult - PullRequest
2 голосов
/ 24 января 2012

Ну, в моем приложении я использую камеру по умолчанию и галерею Android с startActivityforResult как;

Intent i = new Intent("android.intent.action.PICK",
                       MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
startActivityForResult(i, this.SELECT_PICTURE);

Я также могу поймать onActivityResult.Однако, если памяти мало, и я запускаю эту операцию, я обнаружил, что система убивает мою родительскую активность, и даже если активность возвращается со значением, я потерял все свои локальные переменные (и снова вызывается onCreate ()).Только onResume () должен быть вызван снова.

Я пробовал несколько раз, я уверен, что это связано с проблемой памяти.Если памяти достаточно, процесс выполняется успешно.Как я могу предотвратить это поведение?

Поскольку Android не убивает приложение на переднем плане, могу ли я по-прежнему использовать эту функцию?Я думаю, что моя проблема почти схожа с этой .


Решение

В дополнение к решению, предоставленному Yahel , использование следующихметоды могут работать.

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
   super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
   super.onRestoreInstanceState(savedInstanceState);
}

Ответы [ 2 ]

9 голосов
/ 24 января 2012

Вам необходимо внимательно прочитать статью, которую необходимо прочитать перед тем, как писать код: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Вы можете активировать и можете быть убиты Android, если у вас мало памяти.Но об этом будет сообщено, и есть очень четко определенный способ решения этой проблемы.

Это причина существования Bundle savedInstanceState во всех ваших действиях по созданию: public void onCreate(Bundle savedInstanceState)

Во время приостановки работы вашего приложения вы должны сохранить все необходимое для воссоздания состояния, в котором находится ваше приложение, а во время создания вашего приложения вы должны проверить, возвращаетесь ли вы с полностью сохраненным экземпляром состояния и восстановить приложение оттуда.

Удачи.

1 голос
/ 24 января 2012

Рассматривали ли вы использование какого-либо типа постоянного хранилища? Сохраните данные, которые нужно сохранить в постоянном хранилище (общие настройки, БД, файловая система и т. Д.), Прежде чем вызывать новое намерение, с каким-то флагом восстановления. Затем, если действие вызывает onCreate и флаг установлен, вы можете восстановить предыдущее состояние активности. Обязательно очистите флаг реконструкции, когда он не нужен, который должен быть в onResume.

Edit:

onSaveInstanceState, по-видимому, является способом для данных, локальных для действия.

...