2010-12-02 9 views
3

Hallo Meine Anwendung funktioniert so.Android erzwingt den vollständigen Neustart, nachdem eine App getötet wurde

StartUpActivity wird zuerst aufgerufen, was eine Menge des init-Kram macht Dann startet es TvbTabActivity (TabActivity), die andere Aktivitäten als Registerkarten hat (z. B. BrowseActivity).

Das Problem, das ich sehe, ist das - wenn eine Task-Killer-App verwendet wird, um meine App auf TvbTabActivity/Browse-Registerkarte zu beenden, und die App erneut gestartet wird, verzichtet das System auf den normalen Ablauf (StartUpActivity wird nicht hervorgebracht) , sondern stellt stattdessen die letzte sichtbare Aktivität direkt wieder her (TvbTabActivity).

Wie kann ich Android zwingen, IMMER zuerst StartUpActivity auszuführen, damit es die App initialisiert?

Offensichtlich habe ich dieses Problem nicht, wenn meine App wegen einer Ausnahme selbst abstürzt, lol, und dann wieder neu gestartet wird.

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

Antwort

0

Sie können nicht. Android versucht, die App dort wiederherzustellen, wo sie aufgehört hat. Der richtige Weg, dies zu handhaben, ist sicherzustellen, dass Sie die Activity life-cycle verstehen und die entsprechende Initialisierung an der entsprechenden Stelle vornehmen.

0

Es gibt eine Reihe von Möglichkeiten, um Ihr Problem zu lösen, die beste wäre, das Android Life-Cycle-Diagramm http://code.google.com/android/images/activity_lifecycle.png zu überprüfen und einen Weg zu finden, die App in diesem Kontext zu arbeiten.

Natürlich, wenn Sie wirklich wollen, können Sie Ihre eigene App durch Aufruf von Activity.finish() beenden, wenn es die onPause() oder onStop() Zustände trifft, aber das ist eine ziemlich hässliche Lösung.

0

Sie können nichts dagegen tun - was mit Ihnen passiert, ist das, was die Force Stop API tut und tun soll.

Task Killer missbrauchen diese API.

Sie können es in 2.2 und später nicht mehr verwenden.

Wenn Sie wirklich vermeiden möchten, können Sie Ihre App auf nur 2.2 oder höher beschränken. Oder, wenn das Problem ist, dass Benutzer sich über sie beschweren, sag ihnen, dass sie keine Task Killer mehr benutzen sollen. Oder wenn das Problem nur darin besteht, dass Ihnen das nicht gefällt, wenn Sie einen Task Killer verwenden, dann verwenden Sie keinen Task Killer.

Dies ist auch das gleiche Verhalten, das auftritt, wenn der Benutzer in der Benutzeroberfläche der Verwaltungsanwendung auf "Stop erzwingen" drückt. Das ist im Allgemeinen gut, da der Benutzer dies explizit tun muss, anstatt das zu tun, was diese Aufgabenkiller-Apps in zunehmendem Maße tun, wo sie einfach Sachen im Hintergrund durchprügeln, ohne dass der Benutzer direkt involviert ist.

Verwandte Themen