2012-02-11 6 views
2

J'ai un problème très difficile à cerner.Android - onCreate étant appelé à chaque lancement

Quand j'installer mon application sur le marché, je vois parfois le comportement suivant:

  1. Navigation loin de l'application appelle onStop, comme prévu
  2. De retour à l'application appelle onCreate pour l'activité principale, au lieu de simplement onRestart/onResume

OnCreate continuera à être appelé chaque fois qu'un utilisateur quitte/retourne à l'application, quoi qu'il arrive. Évidemment, cela cause de gros problèmes en termes d'état, etc.

Parfois, le redémarrage du téléphone résout ce problème, parfois non. L'installation à partir de .adb empêche ce comportement.

Log de se comporter l'application, sur le toucher de l'icône (lors de l'exécution déjà):

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() 

Connexion de l'application foiré:

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() 

Je suis désespéré ici. Des idées?

+0

Je pense qu'il est unpredicatable et non garantis. Si l'activité de l'application n'est pas dans la pile, oncreate sera appelé sinon onResume sera appelé. C'est le cycle de vie. – kosa

Répondre

-1

Cela n'a en fait rien à voir avec le marché. Si Android ne dispose pas de suffisamment de ressources pour garder votre application en mémoire, elle sera supprimée de la mémoire et son processus sera détruit et onCreate sera rappelé à la prochaine ouverture de votre application. Ce qui se passe probablement, c'est que Market est en train de ronger la mémoire de tout votre appareil lorsque vous l'installez et provoquant le comportement décrit.

+0

C'est ce que je pensais initialement, mais en regardant les journaux, l'application continue en arrière-plan très bien. Il n'y a pas de crash ou onDestroy ou quelque chose d'étrange jusqu'à ce que je clique à nouveau sur l'icône et onCreate est appelé. – TomBomb

+0

Hmm ... c'est étrange. Votre application démarre-t-elle et fonctionne-t-elle correctement? Un logcat pourrait donner un peu plus de lumière sur le problème (car ce que vous décrivez va clairement à l'encontre du cycle de vie habituel de l'application) – aviraldg

+0

Oui, il se lance et fonctionne très bien. Le seul problème semble être cette recréation de l'activité principale lorsque l'utilisateur revient à l'application. – TomBomb

2

Si onStop() est appelé, il n'y a rien à onResume. Il est seulement appelé après onPause. Et onRestart n'est appelé que si vous le codez. Voir http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

+0

Hmm ... quand j'appuie sur le bouton "Home", mon journal affiche onPause suivi de onStop. Lorsque j'appuie sur l'icône de l'application, mon journal affiche onRestart suivi de onResume. – TomBomb

+0

C'est comme ça que ça devrait être, est-ce que le code de votre onRestart() fonctionne maintenant? –

+0

Bon, c'est comme ça que ça devrait être ... Mon problème est que l'application peut entrer dans un état lorsque l'on clique sur les déclencheurs d'icônes sur Créer plutôt que sur OnRestart. Rien d'autre ne bloque la mémoire sur le téléphone, et l'application fonctionne bien en arrière-plan. Avoir du sens? – TomBomb

Questions connexes