2010-06-14 17 views
3

Je me demande pourquoi le Motorola Milestone avec 2.1-update1 se comporte différemment de l'émulateur ou par exemple. le Nexus One. J'essaie de quitter mon application avec:onDestroy() ne sera pas appelé après this.finish()

@Override 
protected void onPause() { 
    if(mayDestroyActivity) this.finish(); 
    super.onPause(); 
} 

Cela fonctionne bien sur Emulator ou Nexus One. onDestroy() est appelée immédiatement après onPause() et onStop. Mais pas pour le Milestone. Au lieu de cela, onDestroy() est appelée lorsqu'une autre activité est démarrée. Sa section dans le manifeste ressemble à ceci:

<activity android:name=".MyActivity" 
    android:configChanges="orientation|keyboardHidden" 
android:label="@string/questionnaire_item" 
android:launchMode="singleInstance" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
android:windowSoftInputMode="adjustPan"> 
<intent-filter> 
    <category android:name="android.intent.category.OPENABLE" /> 
</intent-filter> 
</activity> 

Quelqu'un at-il un indice à ce sujet? Mon application dépend de la sortie correctement puisque je sauverai tous les progrès dans onDestroy()

Merci,
Steff

Répondre

2

Si l'utilisateur quitte l'écran d'accueil, cela ne signifie pas que l'application doit être quittée. Dans la plupart du temps, cela donnera une meilleure expérience utilisateur si l'application passe juste en arrière-plan. Essayez de vous fier à saveInstanceState et à onPause.

Quitter une application est considéré comme une mauvaise pratique dans le monde android, avec un téléphone avec un bon système pour un vrai multitouch peut obtenir une meilleure expérience utilisateur si l'application continue de fonctionner après avoir appuyé sur l'écran d'accueil.

+0

Merci, je l'ai compris. Le comportement différent de Milestone m'a finalement permis de voir les choses de la bonne façon. Étrange mais drôle et utile ... – stfn

5

Vous le faites mal. Voici ce que le Doc dit:

Note: ne comptez pas sur cette méthode appelé comme lieu pour la sauvegarde des données ! [...] Il y a des situations où le système tout simplement tuer le processus d'hébergement de l'activité sans appelant cette méthode (ou tout autre) en , donc il ne devrait pas être utilisé pour faire les choses qui sont destinées à rester autour après le processus disparaît.

http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

+1

Vous avez raison, mon approche est fausse. Mais de toute façon, je veux que mon application passe onDestroy() lorsque l'utilisateur quitte à l'écran d'accueil. – stfn

+0

Il n'y a aucun moyen de faire la mauvaise approche à droite. "Il existe des situations où le système va simplement tuer le processus d'hébergement de l'activité sans appeler cette méthode" est une déclaration que vous devriez prendre au pied de la lettre. –

+1

Vous avez encore raison. J'ai tout déplacé à onPause(). Fonctionne aussi bien. Merci – stfn

2

Vous devez utiliser onSaveInstanceState, consultez lien this.