#java #android
#java #Android
Вопрос:
Я разрабатываю приложение, которое вызывает камеру, делает снимок и создает эскиз. До сих пор он работал отлично…Я не знаю, по какой причине, но теперь, когда я делаю снимок и нажимаю «Сохранить» (по умолчанию для Android), вызывается метод onCreate.
Итак, загрузка моего эскиза больше не работает
Я уже пытался изменить свой манифест Android:
<uses-feature android:name="android.hardware.screen.portrait" />
<activity
android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait">
</activity>
onCreate все еще вызывается.
Способ сделать снимок:
public void takePicture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
FileHelper fileHelper = new FileHelper(this);
fileUri = fileHelper.saveFile();
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// start the image capture Intent
startActivityForResult(intent, ConstantsHelper.CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
Есть ли какой-либо способ предотвратить вызов «onCreate» после съемки?
Спасибо!
Ответ №1:
Нет. Вам просто нужно исправить свой код таким образом, чтобы он работал на протяжении всего жизненного цикла естественной активности. Будет ли ваш предыдущий экземпляр Activity оставаться в живых, когда другой выйдет на передний план, зависит только от устройства (сколько памяти доступно для вашего приложения, установлен ли флажок «Не сохранять действия» в разделе Параметры разработчика и т. Д.).
Это совершенно верный случай, который, как ожидается, произойдет на платформе, и ваша активность должна быть в состоянии правильно обрабатывать сохранение и восстановление своего состояния, если оно отключено.
В каком бы состоянии вы ни инициализировали onCreate()
, просто убедитесь, что вы сохранили его onSaveInstanceState()
, и когда onCreate()
это произойдет снова, проверьте, не является ли savedInstanceState
оно ненулевым. Если это не так, восстановите любое сохраненное состояние и продолжайте.
Комментарии:
1. Привет! Ваш комментарий сделан, чтобы помнить, что я проверил параметры разработчика, чтобы «не сохранять действия»… Я все равно должен разрабатывать savedInstance?
2. Опция «Не сохранять действия» — это, по сути, параметр, который вы можете включить, чтобы запускать то, что будет происходить естественным образом в средах с ограниченным объемом памяти. Таким образом, вполне вероятно, что большую часть времени, если этот параметр не установлен, ваша активность не будет уничтожена. Однако гарантии нет, и у вас определенно будут некоторые сбои в полевых условиях, если вы не справитесь с этим случаем.