layout: post title: “2019-02-25-巧用Activity栈” date: 2019-02-25 12:11:30 +0800

  1. 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方法
    
  2. 重要Api ActivityManager.getRunningTasks();

  3. 查看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}

```
  1. task和window的关系

ViewPager

Fragment

OnTouchEvent的事件传递