2010-01-25 15 views
15

J'ai une application avec 2 activités, LogonAct et MainAct. LogonAct est une activité d'ouverture de session que je souhaite forcer l'utilisateur à parcourir à chaque fois qu'il retourne à l'application. J'ai mis android: clearTaskOnLaunch = "true" sur LogonAct.Comment effacer la pile à l'activité de la racine lorsque l'utilisateur quitte l'application?

Quand je commence l'application que je passe par cette séquence d'écrans,

Home -> LogonAct -> MainAct -> Home

je puis suivre cette séquence,

LogonAct -> Back -> MainAct

Pourquoi il me ramène à MainAct ? Cette activité ne devrait-elle pas être fermée depuis que LogonAct a android: clearTaskOnLaunch = "true". Je m'attendais à être ramené à la maison lorsque j'appuyais sur le bouton Retour de LogonAct.

extraits pertinents de AndroidManifest.xml,

<activity android:name=".LogonAct" 
      android:clearTaskOnLaunch="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

    <activity android:name=".MainAct"> 
     <meta-data android:name="android.app.default_searchable" 
        android:value=".SearchResults" /> 
    </activity> 

J'utilise 1.5.

Toute aide appréciée.

+0

Pouvez-vous modifier votre question et ajoutez votre Manifeste, ou au moins l'élément pour 'LogonAct', car cela aiderait les gens à repérer s'il y a une erreur. –

+0

Snippets de AndroidManifest.xml inclus Dave. J'aurais dû les inclure avec la question, mais je n'avais pas le code devant moi. – Adrian

Répondre

11

Les documents pour android:clearTaskOnLaunch indiquent que cet attribut s'applique "chaque fois que [l'activité] est relancée à partir de l'écran d'accueil".

Cependant, dans votre cas où vous appuyez sur le bouton Accueil pour revenir à l'écran d'accueil, plutôt que d'appuyer sur le bouton Retour. Cela signifie que votre application n'est pas réellement relancée parce que le MainAct n'était pas "terminé". Cela ne se produit que lorsque vous appuyez sur Retour (ou si Android tue la tâche pour économiser les ressources, etc.).

Comme vous avez seulement deux activités dans votre application, vous pouvez définir l'attribut android:noHistory sur MainAct, assurant ainsi que les utilisateurs ne peuvent jamais revenir et doit passer par le LogonAct. En outre, il semble un peu ennuyeux de forcer les utilisateurs à se reconnecter chaque fois qu'ils quittent l'application (par exemple lorsqu'ils reçoivent un appel téléphonique).
Vous pouvez conserver un jeton de session avec délai dans le stockage persistant de votre application, ou maintenir une connexion réseau ouverte à l'aide d'un service si votre application fonctionne comme cela, mais cela dépend de vous et de vos besoins. :)

+1

Merci pour votre aide Christopher. J'ai encore quelques activités qui peuvent venir après MainAct donc si j'utilise android: noHistory sur MainAct, ces autres activités reviennent à l'écran d'ouverture de session quand je sélectionne Retour. Je suis entièrement d'accord que la connexion sur chaque fois que vous venez à l'application n'est pas idéal. C'est une application de gestionnaire de mot de passe donc je ne voulais pas la laisser accessible trop longtemps. Ce que je vais essayer de faire est d'avoir une minuterie qui fonctionne de manière similaire à sudo, c'est-à-dire demander le mot de passe si cela fait plus de x secondes depuis sa dernière entrée. – Adrian

+3

Ah. Dans ce cas, vous pouvez ajouter un appel de méthode rapide dans 'onResume()' de chaque 'Activity' que vous avez qui vérifie si une certaine période de temps s'est écoulée. Si c'est le cas, appelez 'finish()' et lancez 'Intent' pour les renvoyer à' LogonAct'. –

15

Vous pouvez faire ce qui suit: 1.
ensemble clearTaskOnLaunch = "true" dans AndroidManifest, dans la déclaration de l'activité principale
2.l'activité qui doit fermer:

@Override 
public void onBackPressed(){ 
    moveTaskToBack(true); 
} 

donc si l'utilisateur appuie de nouveau - il revient à l'écran d'accueil si l'utilisateur lance aplication à nouveau - pile de tâches efface et il vient à la racine principale activité

+0

Merci muzhig Votre description me aide beaucoup. – amity

+0

merci muzhig..it m'a aidé ... –