taskAffinity浅析

taskAffinity浅析

  1. 默认如果没配taskAffinity属性的Activity的taskAffinity是包名
  2. 同一个安装包下的相同进程,它们的默认taskAffinity都是包名
  3. 同一个安装包下的不同进程,它们的默认taskAffinity也是包名
    验证如下:
<activity
    android:name=".TaskActivity"
    android:exported="true"
    />

<activity
    android:name=".TaskActivity1"
    android:exported="true"
    android:process=":TaskActivity1"
    />

启动TaskActivity
启动TaskActivity1

dump日志

adb shell dumpsys activity > D:/t.txt
   TaskRecord{bc0bdf9 #11882 A=com.seekting.demo2018 U=0 StackId=1 sz=3}
       Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.seekting.demo2018/com.seekting.demo_lib.MainActivity }
         Hist #2: ActivityRecord{7aa6279 u0 com.seekting.demo2018/.TaskActivity1 t11882}
           Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity1 }
           ProcessRecord{288f13e 2586:com.seekting.demo2018:TaskActivity1/u0a344}
         Hist #1: ActivityRecord{95d7b9b u0 com.seekting.demo2018/.TaskActivity t11882}
           Intent { cmp=com.seekting.demo2018/.TaskActivity }
           ProcessRecord{2308e43 1014:com.seekting.demo2018/u0a344}
         Hist #0: ActivityRecord{1ff4aa8 u0 com.seekting.demo2018/com.seekting.demo_lib.MainActivity t11882}
           Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.seekting.demo2018/com.seekting.demo_lib.MainActivity }
           ProcessRecord{2308e43 1014:com.seekting.demo2018/u0a344}

可以看到三个ActivityRecord都是在同一个栈里,因此和进程没关系

  1. 同一个taskAffinity的Activity,不管中间夹了什么Activity,它们总会放在一个Task里

为了验证同一个TaskAffinity总会放一起,来做个试验:

       <activity
            android:name=".TaskActivity"
            android:exported="true"
            />

        <activity
            android:name=".TaskActivity1"
            android:exported="true"
            />


接下来,间断性的启动这两个Activity:

Home键
adb shell am start -n com.seekting.demo2018/com.seekting.demo2018.TaskActivity
Home键
启动GooglePlay
adb shell am start -n com.seekting.demo2018/com.seekting.demo2018.TaskActivity1
adb shell dumpsys activity > D:/t.txt
      TaskRecord{715b283 #11876 A=com.seekting.demo2018 U=0 StackId=1 sz=2}
      Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity }
        Hist #1: ActivityRecord{475c8c2 u0 com.seekting.demo2018/.TaskActivity1 t11876}
          Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity1 }
          ProcessRecord{1c0293d 18509:com.seekting.demo2018/u0a344}
        Hist #0: ActivityRecord{e5a779e u0 com.seekting.demo2018/.TaskActivity t11876}
          Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity }
          ProcessRecord{1c0293d 18509:com.seekting.demo2018/u0a344}
    Task id #11874
    mFullscreen=true
    mBounds=null
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
      TaskRecord{3ed3634 #11874 A=com.android.vending U=0 StackId=1 sz=1}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.vending/.AssetBrowserActivity (has extras) }
        Hist #0: ActivityRecord{66f780f u0 com.android.vending/com.google.android.finsky.activities.MainActivity t11874}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.android.vending/com.google.android.finsky.activities.MainActivity bnds=[1134,1242][1410,1614] (has extras) }
          ProcessRecord{feb27b1 25645:com.android.vending/u0a35}
    Task id #11875
    mFullscreen=true
    mBounds=null
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
      TaskRecord{d63c507 #11875 A=com.google.android.apps.maps U=0 StackId=1 sz=1}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.apps.maps/com.google.android.maps.MapsActivity (has extras) }
        Hist #0: ActivityRecord{e93f67b u0 com.google.android.apps.maps/com.google.android.maps.MapsActivity t11875}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.apps.maps/com.google.android.maps.MapsActivity bnds=[1134,870][1410,1242] (has extras) }
          ProcessRecord{e9b5bc8 15152:com.google.android.apps.maps/u0a82}

可以看出,虽然中间启动过GooglePlay应用,但是它们还是会在一起。

  1. 不同安装包,相同taskAffinity,会被放一起

验证一下:

<activity
    android:name=".TaskActivity"
    android:taskAffinity="com.android.vending"
    android:exported="true"
    />

<activity
    android:name=".TaskActivity1"
    android:exported="true"
    />
启动GooglePlay
adb shell am start -n com.seekting.demo2018/com.seekting.demo2018.TaskActivity
adb shell am start -n com.seekting.demo2018/com.seekting.demo2018.TaskActivity1

导出activity栈


adb shell dumpsys activity > D:/t.txt

查看TaskRecord,按以下关键字查找:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
  Stack #1:
  mFullscreen=true
  mBounds=null
    Task id #11880
    mFullscreen=true
    mBounds=null
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
      TaskRecord{6cbdd18 #11880 A=com.android.vending U=0 StackId=1 sz=2}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.vending/.AssetBrowserActivity (has extras) }
        Hist #1: ActivityRecord{6308fd6 u0 com.seekting.demo2018/.TaskActivity t11880}
          Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity }
          ProcessRecord{3724e00 23846:com.seekting.demo2018/u0a344}
        Hist #0: ActivityRecord{5783fe0 u0 com.android.vending/com.google.android.finsky.activities.MainActivity t11880}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.android.vending/com.google.android.finsky.activities.MainActivity bnds=[1134,1242][1410,1614] (has extras) }
          ProcessRecord{35a996d 23289:com.android.vending/u0a35}
    Task id #11881
    mFullscreen=true
    mBounds=null
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
      TaskRecord{abaa371 #11881 A=com.seekting.demo2018 U=0 StackId=1 sz=1}
      Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity1 }
        Hist #0: ActivityRecord{a26ac95 u0 com.seekting.demo2018/.TaskActivity1 t11881}
          Intent { flg=0x10000000 cmp=com.seekting.demo2018/.TaskActivity1 }
          ProcessRecord{3724e00 23846:com.seekting.demo2018/u0a344}

很重要的两条:
TaskRecord{6cbdd18 #11880 A=com.android.vending U=0 StackId=1 sz=2}
com.seekting.demo2018/.TaskActivity和com.google.android.finsky.activities.MainActivity在一起

TaskRecord{abaa371 #11881 A=com.seekting.demo2018 U=0 StackId=1 sz=1}
com.seekting.demo2018/.TaskActivity1自己在一个Task当中

也就是说task的摆放和taskAffinity有关,如果是相同taskAffinity系统会把它们放一起。而与进程关系不大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值