Android - это активность, восстановленная из неактивного состояния приложения - PullRequest
0 голосов
/ 25 сентября 2018

Я загружаю данные из Интернета и сохраняю их в ViewModel .Таким образом, когда ориентация устройства меняется, данные сохраняются, и мне не нужно перезагружать их из Интернета.Однако, если приложение переходит в неактивное состояние (из-за того, что другим приложениям требуется память), данные внутри ViewModel будут удалены, и мне потребуется перезагрузить их после восстановления действия / фрагмента.Эту проблему, конечно, можно обойти, сохранив некоторый флаг в методе onSaveInstanceState() и перезагрузив данные из Интернета, если мы найдем флаг в нашем пакете savedInstanceState при воссоздании действия / фрагмента.Это, однако, не делает различий между возвращением из бездействия и простым изменением ориентации.Таким образом, каждый раз, когда я включаю устройство, данные излишне перезагружаются с сервера.

Есть ли способ узнать, была ли активность / фрагмент восстановлена ​​из неактивного состояния?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Есть ли способ узнать, была ли активность / фрагмент восстановлена ​​из неактивного состояния?

Вы можете использовать тот факт, что переменные вернутся к своим значениям по умолчанию (неинициализированным), когдапроцесс вашего приложения убит, и объедините его с обычной savedInstanceState логикой.

public class MainActivity extends AppCompatActivity {

    private static boolean processWasAliveTheWholeTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            processWasAliveTheWholeTime = true;
        } else {
            if (!processWasAliveTheWholeTime) {
                // if savedInstanceState is not null, that means we're being recreated.
                // the only way processWasAliveTheWholeTime could be false is if our process was killed.
            }
        }
    }
}
0 голосов
/ 25 сентября 2018

Пожалуйста, попробуйте реализовать вашу ViewModel с LiveData.Для LiveData делает объект не жизненного цикла, чтобы быть в курсе жизненного цикла.Кроме того, подготовьтесь к преждевременной смерти приложения, сохранив данные с помощью SharePreferences, так как onSavedInstanceState удаляет все данные в onDestroy (), SharePreferences может сохранять и извлекать сохраненные данные при повторном запуске приложения.ViewModel обрабатывает только вещи, связанные с пользовательским интерфейсом и не знает ничего под названием LIFECYCLE.Вот почему на помощь приходит шаблон наблюдателя - LiveData.Даже onSavedInstanceState () не может прийти на помощь, если приложение достигает onDestroy ().В заключение, используйте ViewModel с LiveData и сохраняйте данные для преждевременной смерти приложения, но не с onSavedInstanceState (), а с более мощными, такими как SharedPreferences и т. Д.

...