Android 在应用程序被终止后强制完全重新启动

发布于 2024-10-05 21:00:22 字数 1643 浏览 3 评论 0原文

你好 我的应用程序是这样工作的。

首先调用 StartUpActivity,它执行许多初始化操作 然后它启动 TvbTabActivity (TabActivity),该活动具有其他活动作为其选项卡(例如 BrowseActivity)。

我看到的问题是这样的 - 当任务杀手应用程序用于终止 TvbTabActivity/Browse 选项卡上的应用程序,并且应用程序再次重新启动时,系统会放弃正常流程(不会生成 StartUpActivity),而是恢复直接最后一个可见的活动(TvbTabActivity)。

我如何强制 Android 始终首先运行 StartUpActivity,以便它初始化应用程序?

显然,当我的应用程序由于异常而自行崩溃,然后再次重新启动时,我不会遇到此问题。

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寻找一个思念的角度 2024-10-12 21:00:22

你不能。 Android 将尝试从中断处恢复应用程序。处理此问题的正确方法是确保您了解 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.

风渺 2024-10-12 21:00:22

有几种方法可以解决您的问题,最好的方法是检查 Android 生命周期图 http://code.google.com/android/images/activity_lifecycle.png 并尝试找出一种方法使应用程序在该上下文中运行。

当然,如果你真的想要,你可以通过在 onPause() 或 onStop() 状态时调用 Activity.finish() 来终止你自己的应用程序,但这是一个相当丑陋的解决方案。

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.

假面具 2024-10-12 21:00:22

您对此无能为力——发生在您身上的正是强制停止 API 所做的和打算做的。

任务杀手正在滥用该 API。

他们不能再在 2.2 及更高版本中使用它。

如果您确实想要避免它,您可以将您的应用限制为仅 2.2 或更高版本。或者,如果问题是用户抱怨他们,请告诉他们停止使用任务杀手。或者,如果问题只是您不喜欢在使用任务杀手时发生这种情况,那么就不要使用任务杀手。

此外,这与用户在管理应用程序的 UI 中按“强制停止”时发生的行为相同。不过,这通常很好,因为用户必须明确地执行此操作,而不是这些任务杀手应用程序越来越多地执行的操作,它们只是在后台执行操作,而无需用户直接参与。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文