Действительно, очень хороший вопрос, который я пытаюсь разгадать сам.
Мне даже интересно, какая разница между уничтожением приложения и перезагрузкой телефона.
Если пользователь вручную убивает приложение или открывает 20 других приложений, он, вероятно, захочет запустить приложение с самого начала.
Почему Android не восстанавливает состояние после перезагрузки телефона?
Кроме того, я вижу, что когда приложение закрывается (системой), глобальные переменные обнуляются при повторном запуске активности.
Этот вид нарушает концепцию Java. Если у вас есть какое-то состояние в приложении, и приложение стирает его, я ожидаю, что приложение перезапустится.
Предлагаемое мной решение:
1. Handle the case of a state problem: Initiate a simple state (new Object()) as a global variable. For each Activity, in the methods onCreate/Start/Resume check that the state is null. If it's null launch the first activity with 'Intent.FLAG_ACTIVITY_CLEAR_TOP' - as if the application is relaunched.
2. Try not to use global variables - Always put data in the intent.
3. Lazy load global variables - If you do want to use global data, don't count on one time initialization. Lazy load them 'if (A.MY_DATA == null) {A.MY_DATA = new ...}' - Don't forget to do it in the background if it will take a long time (AsyncTask). Loading partial state needs to be done carefully because it may not comply to other loaded state objects.
Недостатком первого пункта является то, что обработка проблем состояния должна выполняться для каждой операции (AOP еще не реализована в Android).
Надеюсь, это помогло.