Intent.FLAG_ACTIVITY_CLEAR_TASK的替代方法

我有两个应用程序App-B启动App-A。 如果用户从应用程序AI内部启动应用程序B,则应用程序A完成,所以我没有问题。

如果用户从应用程序抽屉直接进入应用程序B或长按主页button,则在应用所有附加function之前,首先执行下面清除App A中的任务。 这有理想的影响,但只适用于API 11.在较低的API上,APP-A中的新任务不会改变,extras putExtra将不起作用。 FLAG_ACTIVITY_CLEAR_TASK替代方法? 对于API <= 10?

  Intent i = new Intent("com.App-A"); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

谢谢

贾森

Solutions Collecting From Web of "Intent.FLAG_ACTIVITY_CLEAR_TASK的替代方法"

新的IntentCompat应该对此有所帮助,但显然API低于11的标志被忽略。

要使用IntentCompat,请执行以下操作:

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 

这将正常工作

 i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

我为这些意向标志find的最好的文档在这里: http : //blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

我不明白你要做什么,但你有没有试过FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

我在理解你所问的内容时可能是错误的,但是当你启动B时,你想让A被杀吗?

在A中,将其添加到清单中的活动标记中:

 android:noHistory=true 

这会导致一旦失去焦点,活动将从内存中移除。

我仍然有很多理解这个问题的麻烦,但想帮助你解决这个问题。 由于评论只允许600个字符,而且格式不好,所以我要创build一个答案,因为我确信我们可以一起解决这个问题。

我希望能够重现您的问题。 为此,我创build了2个应用程序: AppAAppB 。 AppA具有一个称为ActivityA的单个ActivityA而AppB具有一个称为ActivityB的单个ActivityBActivityAActivityB使用android:launchMode="singleTask"

ActivityA有一个启动AppB的button,如下所示:

  Intent intent = new Intent("de.sharpmind.example.AppB"); intent.putExtra("extra", "launched from AppA"); startActivity(intent); finish(); 

ActivityB有一个启动AppA的button,如下所示:

  Intent intent = new Intent("de.sharpmind.example.AppA"); intent.putExtra("extra", "launched from AppB"); startActivity(intent); 

这一切都如我所料。 AppA和AppB在不同的任务中运行。 在每个应用程序的onCreate()方法中正确地看到“额外”。

所以,你可以告诉我更多关于你的问题。 我怎样才能重现你的问题? 你写了:

在较低的API上,APP-A中的新任务不会改变,extras putExtra将不起作用。

你是什​​么意思? 你在哪里放演员,你在哪里得到他们,你会发生什么?

另外,你的launchModeAppB什么?

另外,当你遇到这个问题时,AppA的任务堆栈还有其他的活动吗?

请在您的原始问题或这里作为评论提供更多的信息。

使用FLAG_ACTIVITY_CLEAR_TASK清除后退堆栈。 如果我理解正确,这就是你想要的行为。

在清单中使用singleInstance而不是singleTask会执行此操作。

在评论中你说过,它一定是singleTask 。 我假设这是因为你在某些情况下需要后退堆栈。

由于launchMode无法更改, launchMode不适用于API <= 10,因此您可能必须创build两个相同的活动。

一个是launchMode=singleTask ,另一个是launchMode=singleInstance

把它添加到使用singleInstance的应用程序抽屉中启动时获得一个清晰的堆栈:

  <category android:name="android.intent.category.LAUNCHER" />