2010-12-02 74 views
3

Bonjour Mon application fonctionne comme ceci. StartupActivity est appelé en premier, ce qui fait beaucoup de choses d'initialisation Ensuite, il lance TvbTabActivity (TabActivity) qui a d'autres activités comme ses onglets (par exemple BrowseActivity). Le problème que je vois est le suivant: lorsqu'une application de tueur de tâches est utilisée pour terminer mon application sur l'onglet TvbTabActivity/Browse, et que l'application est à nouveau relancée, le système renonce au flux normal (StartUpActivity n'est pas généré) , mais restaure à la place la dernière activité visible directement (TvbTabActivity).Android forçant le redémarrage complet après le blocage d'une application

Comment puis-je forcer Android à TOUJOURS lancer StartUpActivity en premier, afin qu'il initialise l'application?

De toute évidence, je n'ai pas ce problème lorsque mon application se bloque seule, lol, en raison d'une exception, et est ensuite relancé à nouveau.

<application android:icon="@drawable/appicon" 
    android:label="@string/app_name" android:name="com.xyz.QPApplication" 
    android:debuggable="true"> 

    <activity android:name=".activity.StartUpActivity" android:configChanges="locale|orientation" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    </activity> 


    <activity android:name=".catalogue.BrowseActivity" android:configChanges="locale|orientation" 
    android:label="@string/app_name" android:screenOrientation="portrait" 
    android:launchMode="singleTop"> 
    <intent-filter> 
    <action android:name="com.xyz.android.intent.action.BROWSE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 

    </activity> 

    <activity android:name=".activity.TvbTabActivity" android:configChanges="locale|orientation" 
    android:screenOrientation="portrait" android:launchMode="singleTask"> 
    </activity> 

Répondre

0

Vous ne pouvez pas. Android va essayer de restaurer l'application où elle s'était arrêtée. La façon correcte de gérer cela est de s'assurer que vous comprenez le Activity life-cycle et de mettre l'initialisation appropriée à l'endroit approprié.

0

Il existe plusieurs façons de résoudre votre problème, le mieux serait de vérifier le cycle de vie Android cycle http://code.google.com/android/images/activity_lifecycle.png et essayer de trouver un moyen de faire fonctionner l'application dans ce contexte. Bien sûr, si vous voulez vraiment vous pouvez tuer votre propre application en appelant Activity.finish() quand il atteint les états onPause() ou onStop(), mais c'est une solution assez laide.

0

Vous ne pouvez rien faire à ce sujet - ce qui vous arrive est ce que l'API force stop fait et veut faire.

Les responsables des tâches abusent de cette API.

Ils ne peuvent plus l'utiliser en version 2.2 et ultérieure.

Si vous vraiment voulez l'éviter, vous pouvez limiter votre application à seulement 2.2 ou plus tard. Ou si le problème est que les utilisateurs se plaignent d'eux, dites-leur d'arrêter d'utiliser des tueurs de tâches. Ou si le problème est juste que vous n'aimez pas ce qui se passe lorsque vous utilisez un tueur de tâches, alors n'utilisez pas un tueur de tâches.

De même, c'est le même comportement qui se produit lorsque l'utilisateur appuie sur «Forcer l'arrêt» dans l'interface utilisateur de l'application de gestion. C'est généralement bien, puisque l'utilisateur doit le faire explicitement, au lieu de ce que ces applications de tueur de tâches ont fait de plus en plus, où ils se contentent de bousculer les choses en arrière-plan sans que l'utilisateur ne soit directement impliqué.