单一任务活动在同一任务中开放?

时间:2016-10-03 20:33:08

标签: android android-intent back-stack

我正在处理一个响应第三方应用程序意图的应用程序。第三方应用程序使用明确的意图打开我们应用程序的主要活动。

当我在app主活动中放置断点或运行adb shell dumpsys activity命令时,我看到他们使用了意图标志 FLAG_ACTIVITY_NEW_TASK

我们的活动使用启动模式 android:launchMode =" singleTask" 。您可能希望我们的应用程序能够在其自己的任务中打开。但事实并非如此。

这些是我注意到的结果

  • Nexus 6,Android 6.0:同样的任务
  • 三星Galaxy Note 4,Android 5:同样的任务
  • 三星Galaxy s3,Android 4.4:新任务
  • Nexus 4,Android 4.4:新任务

第一个问题:为什么会这样?根据文档,如果启动模式为单一任务且意图标记为 FLAG_ACTIVITY_NEW_TASK ,则确保新活动应在其自己的任务中打开。< / p>

这是我从Nexus 6上的dumpsys活动中得到的。我出于隐私原因删除了一些名称。

Task id #280
  TaskRecord{a368235 #280 A=com.thirdPartyApp U=0 sz=4}
  Intent { flg=0x10100000 cmp=com.thirdPartyApp.Activity1 }
    Hist #3: ActivityRecord{2a95b00 u0 ca.myApp.Main t280}
      Intent { act=ca.myApp.Main.ACTION cat=[android.intent.category.DEFAULT] flg=0x10000000 pkg=ca.myApp cmp=ca.myApp.Main bnds=[75,1648][1364,2937] (has extras) }
      ProcessRecord{df568e7 19422:ca.myApp/u0a277}
    Hist #2: ActivityRecord{d0c821b u0 com.thirdPartyApp.Activity3 t280}
      Intent { cmp=com.thirdPartyApp.Activity3 (has extras) }
      ProcessRecord{6779824 7717:com.thirdPartyApp/u0a15}
    Hist #1: ActivityRecord{26b0a9c u0 com.thirdPartyApp.Activity2 t280}
      Intent { act=com.thirdPartyApp.ACTION cmp=com.thirdPartyApp.Activity2 (has extras) }
      ProcessRecord{6779824 7717:com.thirdPartyApp/u0a15}
    Hist #0: ActivityRecord{3969feb u0 com.thirdPartyApp.Activity1 t280}
      Intent { flg=0x10100000 cmp=com.thirdPartyApp bnds=[114,434][1325,1645] }
      ProcessRecord{6779824 7717:com.thirdPartyApp/u0a15}

flg = 0x10000000 标志中可以清楚地看到他们使用意图标志 FLAG_ACTIVITY_NEW_TASK https://developer.android.com/reference/android/content/Intent.html

调用myApp

情况变得更糟。如果我返回主屏幕并从主屏幕启动myApp,它将在两个单独的任务中打开两次!

Task id #306
  TaskRecord{664c4c7 #306 A=ca.myApp U=0 sz=1}
  Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=ca.myApp.Main bnds=[113,378][337,602] (has extras) }
    Hist #0: ActivityRecord{88825a0 u0 ca.myApp.Main t306}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=ca.myApp.Main bnds=[113,378][337,602] (has extras) }
      ProcessRecord{df568e7 19422:ca.myApp.Main/u0a277}


Task id #280
  TaskRecord{a368235 #280 A=com.thirdPartyApp U=0 sz=4}
  Intent { flg=0x10100000 cmp=com.thirdPartyApp.Activity1 }
    Hist #3: ActivityRecord{2a95b00 u0 ca.myApp.Main t280}
      Intent { act=ca.myApp.Main.ACTION cat=[android.intent.category.DEFAULT] flg=0x10000000 pkg=ca.myApp cmp=ca.myApp.Main bnds=[75,1648][1364,2937] (has extras) }
      ProcessRecord{df568e7 19422:ca.myApp/u0a277}
    Hist #2: ActivityRecord{d0c821b u0 com.thirdPartyApp.Activity3 t280}
      Intent { cmp=com.thirdPartyApp.Activity3 (has extras) }
      ProcessRecord{6779824 7717:com.thirdPartyApp/u0a15}
    Hist #1: ActivityRecord{26b0a9c u0 com.thirdPartyApp.Activity2 t280}
      Intent { act=com.thirdPartyApp.ACTION cmp=com.thirdPartyApp.Activity2 (has extras) }
      ProcessRecord{6779824 7717:com.thirdPartyApp/u0a15}
    Hist #0: ActivityRecord{3969feb u0 com.thirdPartyApp.Activity1 t280}
      Intent { flg=0x10100000 cmp=com.thirdPartyApp bnds=[114,434][1325,1645] }
      ProcessRecord{6779824 7717:com.thirdPartyApp/u0a15}

第二个问题:当我删除 android:launchMode =&#34; singleTask&#34; 并在s3或Nexus 4上重新测试时,myApp会在与第三方应用相同的任务中打开。从这份文件https://developer.android.com/guide/components/tasks-and-back-stack.html中可以看出以下内容

  

如果两个活动都定义了活动B应该如何与任务相关联,   然后,活动A的请求(如意图中所定义)受到尊重   通过活动B的请求(如清单中所定义)。

从我的测试中可以清楚地看到Manifest属性对于intent标志。为什么会这样?

0 个答案:

没有答案