<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都是在同一个栈里,因此和进程没关系
为了验证同一个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应用,但是它们还是会在一起。
验证一下:
<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系统会把它们放一起。而与进程关系不大