Намерение камеры Android снова вызывает onCreate

#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. Опция «Не сохранять действия» — это, по сути, параметр, который вы можете включить, чтобы запускать то, что будет происходить естественным образом в средах с ограниченным объемом памяти. Таким образом, вполне вероятно, что большую часть времени, если этот параметр не установлен, ваша активность не будет уничтожена. Однако гарантии нет, и у вас определенно будут некоторые сбои в полевых условиях, если вы не справитесь с этим случаем.