Android 活动 - 模仿孤立的应用程序行为(分别处理每个意图)

Android activities - mimic isolated application behavior (process every intent separately)

我写了一个 activity,我希望它的行为(在实例化方面)类似于命令行工具,例如 sort(假设:sort = my_application, 管道 "|" = intent_resolution)

在 Android 世界中,每个意图都由我的 activity 处理,我仍然可以返回。


用例是这样的: 我们有一个 Activity com.A.

  1. 用户从主屏幕运行它:

LAUNCHER/MAIN of com.A (屏幕斧头出现)

  1. 主页按钮已按下。

  2. 然后用户以明确的意图运行 A

am -n com/.A -e some_extra(屏幕 Ay 出现 - 它有所不同,因为它取决于意图)

  1. 又是主页按钮。
  2. 用户从启动器图标再次(第三次)运行 A:

LAUNCHER/MAIN of com.A(屏幕 Ay 出现,因为 Android 'thinks' 该用户想要上一个 activity。但是 他想再次见到 Ax - 作为对意图 LAUNCHER/MAIN)

的正确回应

我可以通过设置 launchMode=singleTask 来获得这样的行为,所以我的每个意图都由 onCreateonNewIntent 处理。但是在这种情况下我失去了历史。因此,如果 A 调用 B,B 调用 A (A → B → A),我将首先失去 A。如果 A 调用 A (A → A),我将无法返回。


是否可以设置 <activity> 清单属性的这种组合或使用其他方式来获得该行为?

注意:如果我更改 LAUNCHER/MAIN 用于任何其他目的,它不会改变任何内容。

看起来像

的组合
android:finishOnTaskLaunch="true"
android:finishOnCloseSystemDialogs="true"

和默认值 launchMode 或多或少根据我的需要工作。我还没有对其进行深入测试,也不期望它能 100% 精确地工作,但目前它工作正常。

我也试过detect home button 然后手动完成activity,但显然它也不是很可靠。


编辑:此解决方案的缺点是每次 phone 响铃或您只是锁定屏幕时,带有此类清单的应用程序都会被销毁。