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

谢谢

贾森

  • 安装了一个应用程序,在启动器中显示两个条目
  • Android:执行时出现“无法重新加载AVD列表:”错误
  • Android:networking收音机在ACTION_SHUTDOWN事件之前closures。事件顺序在ICS中更改
  • 在Android中实现文件选择器并将所选文件复制到另一个位置
  • 如何testingandroid.intent.action.MY_PACKAGE_REPLACED
  • Android Intent.getStringExtra()返回null
  • 通过意图在Android中的特定位置打开谷歌地图
  • 最佳实践 - 将您的应用程序添加到Android共享菜单
  • 新的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" />