巧用activity栈
layout: post title: “2019-02-25-巧用Activity栈” date: 2019-02-25 12:11:30 +0800
-
Activity栈测试
1) normal
无限制叠加Activity,重复创建相同的Activity 2) singleTop 如果当前Activity处于栈顶,那么它就不会再去实例化一个新的Activity,当Activity不处于栈顶的时候,会重新实例化一个新的Activity并置于栈顶
3) singleTask
当启动Activity的时候,如果当前Activity不存在则实例化一个新的Activity,如果当前Activity在任务栈中已经存在,则会复用这个Activity实例, 并弹出他上面的页面
4) singleInstance
在Activity启动模式为singleInstance的情况下,首先我们可以发现的是启动模式为singleInstance的Activity处于不同的任务栈(Task编号不同),并保证不再有其他的Activity实例进入,它还是和singleTask一样保持唯一实例,然后它的退出顺序是不再是根据调用顺序,而是在不同的任务栈中,从上往下退出。
5)
重用了实例,会调用onNewIntent方法
-
重要Api ActivityManager.getRunningTasks();
-
查看Activity栈(可以查看外部App)
adb shell dumpsys activity activities ``` TaskRecord{1930edc #14459 A=com.wwt.simple U=0 StackId=1 sz=1} Run #6: ActivityRecord{aff5139 u0 com.wwt.simple/.mantransaction.mainpage.activity.MainActivity t14459} TaskRecord{bca1104 #14255 A=com.tencent.mm U=0 StackId=1 sz=2} Run #5: ActivityRecord{9b5ffff u0 com.tencent.mm/.ui.conversation.BizConversationUI t14255} TaskRecord{9687a37 #14281 A=android.task.mms U=0 StackId=1 sz=1} Run #4: ActivityRecord{c7ccabe u0 com.android.mms/.ui.MmsTabActivity t14281} TaskRecord{bcd66f #14412 A=com.eg.android.AlipayGphone U=0 StackId=1 sz=1} Run #3: ActivityRecord{fdfc6e8 u0 com.eg.android.AlipayGphone/.AlipayLogin t14412} TaskRecord{bca1104 #14255 A=com.tencent.mm U=0 StackId=1 sz=2} Run #2: ActivityRecord{3eda54b u0 com.tencent.mm/.ui.LauncherUI t14255} TaskRecord{d55a2d6 #14418 A=com.alibaba.android.rimet U=0 StackId=1 sz=1} Run #1: ActivityRecord{6919b7b u0 com.alibaba.android.rimet/.biz.home.activity.HomeActivity t14418} TaskRecord{393e82a #14316 A=enfc.metro U=0 StackId=1 sz=1} Run #0: ActivityRecord{7b5530f u0 enfc.metro/.main.MainActivity t14316}
```
- task和window的关系
ViewPager
Fragment
OnTouchEvent的事件传递