1.关于Activity (下) :LaunchMode

1 四种启动模式介绍

  • Standard 标准
    如果任务栈默认是包名,则每次都新建一个activity;
    如果任务栈是affinity来命名的,并且已经存在,则不会新建,而是执行恢复流程。
  • SingleTop 栈顶复用
    如果任务栈顶存在,则复用,调用onNewIntent
// 进入Activity
2019-12-12 09:50:34.121 9811-9811/com.example.learndemo D/LifeCycle: onCreate
2019-12-12 09:50:34.224 9811-9811/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:50:34.234 9811-9811/com.example.learndemo D/LifeCycle: onResume

// 栈顶已经存在Activity,再次进入Activity
2019-12-12 09:50:47.992 9811-9811/com.example.learndemo D/LifeCycle: onPause
2019-12-12 09:50:47.993 9811-9811/com.example.learndemo D/LifeCycle: onNewIntent
2019-12-12 09:50:47.994 9811-9811/com.example.learndemo D/LifeCycle: onResume
  • SingleTask 栈内复用
    需要taskAffinity属性配合使用
    如果任务栈内存在该Activity,则复用,并移除在其上面的Activity,调用onNewIntent

  • SingleInstance 单实例

android系统Recount History描述的是当前的task个数的情况。

任务栈与进程的关系?
任务栈与进程并没有绝对的一对一关系,同一个app內,通过process属性设置多进程,默认是在同一个任务栈內(app包名)。

	/**
	 * MainActivity是默认首页
	 * SecondActivity设置多进程
	 * ThirdActivity设置单独任务栈
	 */
	<activity android:name=".MainActivity">
    	<intent-filter>
        	<action android:name="android.intent.action.MAIN" />
			<category android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
	
	<activity
		android:name=".SecondActivity"
		android:process=":second_process" />
		
	<activity
		android:name=".ThirdActivity"
		android:launchMode="singleTask"
        android:taskAffinity="com.example.multiprocess.third"/>

运行结果如下:
MainActivity与SecondActivity是不同进程,但是在同一个任务栈;ThirdActivity单独在另一个任务栈

zhengweideMacBook-Pro:~ zhengwei$ adb shell dumpsys activity activities|grep "Run"
    Running activities (most recent first):
        Run #0: ActivityRecord{3fe02d8 u0 com.example.multiprocess/.ThirdActivity t9860}
    Running activities (most recent first):
        Run #1: ActivityRecord{cece906 u0 com.example.multiprocess/.SecondActivity t9859}
        Run #0: ActivityRecord{aec64f1 u0 com.example.multiprocess/.MainActivity t9859}
    Running activities (most recent first):
        Run #0: ActivityRecord{8065c4e u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}
zhengweideMacBook-Pro:~ zhengwei$ 

2 LaunchMode的2种设置方式如何理解?

  1. AndroidMenifest.xml中定义,此activity是自己开发的;
  2. Intent activity flag配置,是启动他人的activity。

3 经验总结

  1. taskAffinity需要SingleTask / SingleInstance配合使用才会有效

  2. taskAffinity+allowTaskReparenting(允许activity在各个Task中转移)
    ActivityA在后台任务栈,
    有其他activity进入前台,并且affinity与ActivityA相同,则自动将ActivityA添加到当前任务栈

adb shell dumpsys activity activities
  1. Binder数据传递大小限制问题
    binder机制限制传输的数据:1M-2*4096

Linux系统内存以页为单位,一页内存为4096字节
Framework/native/libs/binder/ProcessState.cpp
#define BINDER_VM_SIZE ((1 * 1024 * 1024) - sysconf(_SC_PAGE_SIZE) * 2)
可以使用bundle.putBinder()的方式传递大对象

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值