Android: состояние приложения, когда приложение находится вне стека из-за ограничения памяти - PullRequest
5 голосов
/ 30 декабря 2010

Пожалуйста, помогите мне решить эту проблему.

1 > I am having application which Uses Service to retrieve data from server.
2 > Now on Pressing Home key and i have opened new application..
3 > I have opened around 20 application.
4 > So my application might go out of memory stack.
5 > now i am resuming my application, application crashes as i am opening activity of my
    application which is not in the stack.

Есть ли способ, с помощью которого я могу обработать это исключение и перенаправить свою деятельность на домашнюю страницу или возобновить работу приложения и не в стеке ...

Ответы [ 2 ]

5 голосов
/ 08 марта 2011

Действительно, очень хороший вопрос, который я пытаюсь разгадать сам.

Мне даже интересно, какая разница между уничтожением приложения и перезагрузкой телефона.
Если пользователь вручную убивает приложение или открывает 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).

Надеюсь, это помогло.

0 голосов
/ 30 декабря 2010

Использование SharedPreferences для сохранения состояния приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...