Жизненный цикл активности - onCreate вызывается при каждой переориентации

, у меня есть простое действие, которое загружает растровое изображение в onCreate . Я обнаружил, что если повернуть устройство, я могу увидеть из журналов, которые onCreate вызвал снова.Фактически, поскольку все переменные экземпляра снова установлены на значения по умолчанию, я знаю, что все Activity было повторно создано.

После двухкратного поворота я получаю FC, потому что для растрового изображения не может быть выделено достаточно памяти. (Все ли экземпляры активности где-то еще живы? Или сборщик мусора не очищается достаточно быстро?)

@Override
public void onCreate(Bundle savedInstanceState) {
    File externalStorageDir = Environment.getExternalStorageDirectory();
    File picturesDir = new File(externalStorageDir, "DCIM/Camera");
    File[] files = picturesDir.listFiles(new FilenameFilter(){
        public boolean accept(File dir, String name) {
            return name.toLowerCase().endsWith(".jpg");
        }});
    if (files.length > 0) {
        Bitmap bm = BitmapFactory.decodeStream(new FileInputStream(files[0]));
        ImageView view = (ImageView) findViewById(R.id.photo);
        view.setImageBitmap(bm);
    }
}

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

58
задан Synesso 1 October 2011 в 06:52
поделиться

1 ответ

В то время как Явный путь может работать, существует лучшее и надлежащее решение для этих типов проблем. Класс ViewModel. Необходимо взглянуть здесь: https://developer.android.com/topic/libraries/architecture/viewmodel

В основном, Вы расширяете класс ViewModel и определяете все элементы данных в нем, которые мы хотим быть неизменными по созданию ре действия (в этом изменении ориентации случая). И предоставьте соответствующие методы для доступа к методам от класса Действия. Таким образом, когда Действие является созданным ре, объект ViewModel все еще там и так является нашими данными!

0
ответ дан 24 November 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: