0

Я чувствую, что это проблема памяти на устройствах Gingerbread, но после нескольких действий - независимо от того, являются ли эти действия finish() ed или нет - экран становится белым, а активность перезагружается, я никогда не уверен, какая активность в стеке будет обнаружен или закрыт после того, как белый экран исчезнет.пряники случайно перезапускают деятельность

Аналогичным образом, когда это происходит, после выхода приложения экран запуска запускается повторно.

Никакое сообщение об ошибке не отправляется в logcat, нет силы закрытия.

Я отслеживал ресурсы в logcat, но я не определял ничего страшного.

Я видел это на устройствах с 512mb RAM, но, так как приложения не получают такое количество ресурсов, его трудно сказать, где вопрос, если это проблема памяти у всех

проницательности оценили

+0

Итак, в чем вопрос? –

ответ

1

Другой возможной причиной такого поведения на Gingerbread может быть постоянная, определенная в com.android.server.am.ActivityStack:

// How long until we reset a task when the user returns to it. Currently 
// 30 minutes. 
static final long ACTIVITY_INACTIVE_RESET_TIME = 1000*60*30; 

... экран становится белым и перезаряжаемая деятельность

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

Я никогда не уверен, деятельность в стеке будет обнажаются или закрыт после белый экран уходит

Флагов, установленные для деятельности используется для определения того, какие действия от будет показан стек. Метод, который определяет это, - ActivityStack#resetTaskIfNeededLocked(ActivityRecord, ActivityRecord). Вы можете посмотреть здесь: Link.

Возможно, вам будет интересно пройти через класс ActivityStack и посмотреть, как обрабатывается запуск/возобновление активности, и как будет перегруппирован стек операций при необходимости.

Обратите внимание, что указанная выше константа содержит значение zero версии 4.0.1_r1 и выше и не используется.

Даже если вы заметили это поведение для действий, запущенных и возобновленных в течение 30 минут, флаги могут по-прежнему нести ответственность за перестановку стека.

Сообщение об ошибке не отправляется на логарифм, нет силы закрытия.

Убийство процесса из-за низкой памяти зарегистрировано в Logcat. Поэтому я сомневаюсь в этом.

+0

как вам избежать этого? есть способ, которым я могу отменить это поведение? – CQM

+0

@CQM В методе, о котором я упоминал выше, выполняется проверка, чтобы увидеть, если 'ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE', перед установкой 'forceReset' в значение true. Таким образом, вы должны быть в состоянии избежать этого, добавив 'android: alwaysRetainTaskState =" true "' к вашей активности в манифесте. Вот что он делает: [Ссылка] (http://developer.android.com/guide/topics/manifest/activity-element.html#always). – Vikram

Смежные вопросы