美文网首页
Activity launchMode基础

Activity launchMode基础

作者: 霍霍9527 | 来源:发表于2020-06-16 16:08 被阅读0次

打印acitivity任务栈信息:adb shell dumpsys activity activities
打印正在运行的信息:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

singleTask 不指定android:taskAffinity不会产生新的任务栈,并且被再次调用的时候回清除其上面的activity


singleTask 界面A-B-A-B后的任务栈情况

singleInstance模式会产生一个新的栈并且Activity只有他自己,在它上面打开新的界面,会调起原来的任务栈打开新界面,并且原来的task后返回的话也要等待原来的都返回才能在回到singleInstance的Activity。


singleInstance模式原任务栈
singleInstance模式自己任务栈

1.Intent.FLAG_ACTIVITY_CLEAR_TASK 要配合Intent.FLAG_ACTIVITY_NEW_TASK使用 清除栈放自己

val intent = Intent(applicationContext, ModeStandardActivity::class.java)
            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
            startActivity(intent)

2.Intent.FLAG_ACTIVITY_CLEAR_TOP 清除其顶层的activity

3.android:taskAffinity="com.huo.taskSelf" 指定任务栈名字,置默认是包名
格式是xxx.xxx.xxx 直接写xxx会报错
The application could not be installed: INSTALL_FAILED_USER_RESTRICTED
可以设置在清单文件application 和 activity标签,application控制所有的activity,activity控制自己,如果不设置默认是包名。
android:taskAffinity="com.huo.taskSelf" 可以用来生成新的任务栈
效果:在历史活动中会有两个活动一个是默认的,一个是指定名字的taskAffinity
android:taskAffinity="com.huo.taskSelf" 生成新的任务栈,并且历史活动会看到两个activity

必要条件缺一不可:
  • 清单文件activity标签配置android:taskAffinity名字不同
  • 开启activity模式Intent.FLAG_ACTIVITY_NEW_TASK or singleInstance or singleTask
    singleInstance:好理解本来就生成新的任务栈再加上名字满足条件
    singleTask:等同于提供了Intent.FLAG_ACTIVITY_NEW_TASK
    注意:如果打开了新的任务栈后点击返回可以回到上一个任务栈,但是如果回到桌面在点开各自的历史活动只会打开自己的。
    还有一种情况通过隐式意图跨应用调用,这个默认就实现了名字的不同,只要指定Intent.FLAG_ACTIVITY_NEW_TASK,就一定开启的两个task,不指定的话会在调用者的任务栈添加被调用的activity
 <intent-filter>
                <action android:name="com.huo.task.activity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
WechatIMG12.jpeg
WechatIMG13.jpeg

相关文章

网友评论

      本文标题:Activity launchMode基础

      本文链接:https://www.haomeiwen.com/subject/tozlxktx.html