Activity的启动模式
-
启动模式:决定新生成的Activity实例是否重用已经存在的Activity实例,是否和其它Activity共用一个task:
-
Task: 一个具有栈结构的对象,一个Task中可以存放多个Activity,启动一个应用也就是创建一个与之对对应的task.
-
Activity启动模式分类:
-
-
singleTop: 如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都需要创建新的Activity。
-
singleTask: 如果要激活的Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈。
-
singleInstance: 只有一个实例,并且该实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
-
-
如何设置Activity的启动模式---两种方式:
-
在Manifests当中对目标Activity配置启动模式。即设置LancheMode属性
-
通过设置IntenFlag设置Activity的启动模式:
-
相关概念:
-
Task : 一个具有栈结构的容器,一个task可以存放多个Activity实例
-
taskAffinity:task序号(每个task序号不同,不同的Activity可以存放在不同的task当中)
如果一个Activity没有明确指明其所处的task容器,则默认为当前Application指明的 taskAffinity,若当前Application也没有指明,则该Activity的taskAffinity 默认为当前Application所在的包名。
-
intentFlag属性常用值:
-
FLAG_ACTIVITY_NEW_TASK ------>singleInstance
-
FLAG_ACTIVITY_SINGLE_TOP ------>singleTop
-
FLAG_ACTIVITY_CLEAR_TOP ------>singleTask
-
FLAG_ACTIVITY_REORDERD_TO_FRONT ---如果栈里已经存在目标Activity,则将它拿到栈顶部,但原先在目标Activity之上的Activity不会被出栈。
-
-
-
-
Activity之间的数据传递方式
-
intent.putExtra() 将需要传递的数据直接通过意图传递
-
Bundle 将需要传递的数据存放在bundle当中,然后将bundle对象传递给intent对象
复杂数据的传递
-
把需要传递的类实现Serializable接口
-
把需要传递的类实现Parcelable,并重写相关方法
Activity数据的回传
Activity_01----->Activity_02------>Activity_01 过程
1.startActivityForResult(intent)
2.onActivityResult
(即只需要将Activity)
启动系统的Activity(隐式启动)
常用的系统Activity:(注意在Manifest中提前打开相应的权限)
-
拨打电话: intent.setAction(Intent.ACTION_CALL)
-
发送短信: intent.setAction(Intent.ACTION_SEND)
-
打开相机: intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE)
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!