2012-02-11 4 views
2

У меня очень сложная проблема.Android - onCreate, вызываемый при каждом запуске

Когда я устанавливаю мое приложение с рынка, я иногда вижу следующее поведение:

  1. покинет приложение вызывает OnStop, как и ожидалось
  2. Возвращаясь к приложению вызывает OnCreate для основной деятельности, а не только onRestart/onResume

onCreate будет продолжать получать вызовы каждый раз, когда пользователь уходит/возвращается к приложению, несмотря ни на что. Очевидно, что это вызывает большие проблемы с точки зрения состояния и т. Д.

Иногда перезагрузка телефона устраняет эту проблему, иногда нет. Установка из .adb предотвращает это поведение.

Вход из себя приложение, на значок прикосновения (во время работы уже):

2-10 18:56:33.855: INFO/ActivityManager(1482): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.sidekickApp/.Main } from pid 1604 
02-10 18:56:33.855: VERBOSE/HtcAppUsageStats(1482): (launch app, package): (Sidekick App, com.sidekickApp) 
02-10 18:56:33.865: DEBUG/PhoneWindow(1604): couldn't save which view has focus because the focused view [email protected] has no id. 
02-10 18:56:33.865: DEBUG/Background traffic light(1604): traffic light: GREEN, mBackgroundTrafficLight = false 
02-10 18:56:33.895: VERBOSE/Main(2648): Debug: onRestart() 
02-10 18:56:33.895: DEBUG/Main(2648): Debug: onResume() 

Войти с перепутались приложения:

02-10 18:39:35.813: INFO/ActivityManager(1477): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.sidekickApp/.Main bnds=[360,586][477,704] } from pid 1583 
02-10 18:39:35.843: VERBOSE/HtcAppUsageStats(1477): (launch app, package): (Sidekick App, com.sidekickApp) 
02-10 18:39:35.873: DEBUG/Background traffic light(1583): traffic light: GREEN, mBackgroundTrafficLight = true 
02-10 18:39:35.903: VERBOSE/Main(7364): Debug: onCreate() 

Я отчаянный здесь. Есть идеи?

+0

Я думаю, что это unpredicatable и не гарантируется. Если приложение acitivty не находится в стеке, oncreate будет называться иначе onResume будет вызываться. Это жизненный цикл. – kosa

ответ

-1

Это фактически не имеет ничего общего с рынком. Если у Android недостаточно ресурсов для хранения вашего приложения в памяти, он будет удален из памяти, и процесс будет убит, а в следующий раз при следующем запуске приложения будет вызван onCreate. Что, вероятно, происходит, так это то, что Market поедает всю память вашего устройства, когда вы устанавливаете этот путь и вызывая описанное поведение.

+0

Это то, что я думал изначально, но, наблюдая за журналами, приложение продолжает в фоновом режиме просто отлично. Нет никакого сбоя или onDestroy или ничего странного, пока я не нажму на значок снова, и вызывается onCreate. – TomBomb

+0

Хм ... это странно. Как ваше приложение запускается и работает нормально, как ожидалось? Логарифм может осветить еще больший свет в этой проблеме (потому что то, что вы описываете, явно противоречит обычному жизненному циклу приложения) – aviraldg

+0

Да, он запускается и работает отлично. Кажется, что единственной проблемой является повторное создание основного вида деятельности, когда пользователь возвращается в приложение. – TomBomb

2

Если onStop() вызывается, нет ничего, чтобы onResume. Он вызывается только после onPause. И onRestart вызывается только если вы его кодируете. См http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

+0

Хм .. Когда я нажал кнопку «Главная», мой журнал показывает onPause, а затем onStop. Когда я нажимаю значок приложения, мой журнал показывает onRestart, а затем onResume. – TomBomb

+0

Так оно и должно быть, теперь работает код в вашем onRestart()? –

+0

Правильно, так оно и должно быть. Проблема заключается в том, что приложение может попасть в состояние при нажатии на триггеры значка onCreate, а не onRestart. На телефоне ничего больше не происходит, и приложение отлично работает в фоновом режиме. Имеют смысл? – TomBomb

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