开发者

Android forcing full restart after an app is killed

开发者 https://www.devze.com 2023-01-28 18:42 出处:网络
Hello My application works like this. StartUpActivity is called first, which does a lot of the init stuff

Hello My application works like this.

StartUpActivity is called first, which does a lot of the init stuff Then it launches TvbTabActivity (TabActivity) that has other Activities as its tabs (e.g. BrowseActivity).

The problem that I am seeing is this - when a task-killer app is used to terminate my app on TvbTa开发者_开发知识库bActivity/Browse tab, and the app is relaunched again, the system forgoes the normal flow (StartUpActivity is not spawned), but instead restores the last visible activity directly (TvbTabActivity).

How can i force Android to ALWAYS run StartUpActivity first, so that it initializes the app?

Obviously, I dont have this problem when my app crashes on its own, lol, due to an exception, and is then relaunched again.

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


You can't. Android will try to restore the app where it left off. The correct way to handle this is to ensure that you understand the Activity life-cycle and put the appropriate initialization in the appropriate place.


There are a couple of ways to solve your issue, the best would be to check the Android Life-cycle diagram http://code.google.com/android/images/activity_lifecycle.png and try to figure out a way to make the app work within that context.

Of course if you really want to you can kill your own app by calling Activity.finish() when it hits the onPause() or onStop() states, but that is quite an ugly solution.


You can't do anything about this -- what is happening to you is what the force stop API does and is intended to do.

Task killers are abusing that API.

They can no longer use it in 2.2 and later.

If you really want to avoid it, you could limit your app to only 2.2 or later. Or if the problem is users are complaining about them, tell them to stop using task killers. Or if the problem is just that you don't like this happening when you use a task killer, then don't use a task killer.

Also this is the same behavior that happens when the user presses "Force stop" in the manage application's UI. That is generally fine though since the user must explicitly do that, instead of what these task killer apps have been increasingly doing where they just whack stuff in the background without the user being directly involved.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号