Android Lifecycle - ActivityManager убивает процесс -> Исключение при возврате из фона - PullRequest
6 голосов
/ 18 мая 2011

У меня очень скучная проблема. Когда мое приложение переходит в фоновый режим, иногда процесс останавливается, как показывает LogCat:

INFO/ActivityManager(187): Low Memory: No more background processes.
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died.
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false}
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed!
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false}
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015}

Когда я затем пытаюсь вернуться в приложение, через переключатель задач (долгое нажатие домой) он пытается вернуться к последнему открытому действию ... и вылетает.

Почему он не открывается с нуля, открывая Main, так как все приложение было закрыто?

Ошибки ERROR / InputDispatcher не всегда появляются.

UPDATE:

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

ОБНОВЛЕНИЕ 2:

Мне удалось решить проблему, проверив onCreate on BaseActivity (который расширяется всеми остальными), если приложение содержит нужные мне данные или если оно пустое (в этом случае оно перезапускает приложение).

Есть ли более элегантное решение или, по крайней мере, способ сказать устройству, что, если приложение убито, я хочу, чтобы приложение было перезапущено?

Эти ссылки помогли понять проблему ... и зная, что нет четкого ответа о том, как хранить данные из приложения: Как объявить глобальные переменные в Android?

ОБНОВЛЕНИЕ 3:

Итак, я задал вопрос, конкретно о , как правильно сохранить данные приложения . Это может помочь тем, у кого такой же вопрос: Android: лучший способ сохранить данные, хранящиеся в Application Singleton Class

1 Ответ

3 голосов
/ 18 мая 2011

Насколько я понимаю, это возвращается, потому что пользователь не закрыл приложение.А хотя: вы получаете доступ к данным пакета в той активности, которая была передана из начальной операции?Если это так, вы можете обратиться к функциям сохранения и восстановления экземпляра пакета, которые вы можете реализовать, чтобы решить, что приложение возвращается на передний план в недопустимом состоянии.

Редактировать для ясности: приложение восстанавливается до предыдущегосостояние, потому что он был убит ОС из-за нехватки памяти, пока он находится в фоновом режиме.При обратном переключении задания оно восстанавливается до прежнего состояния, и неверные / несуществующие данные пакета могут вызывать сбой при возобновлении этой операции.

...