Activity的启动模式
创始人
2024-02-10 22:56:47
0

文章目录

  • Activity的启动模式
    • standard
    • singleTop
    • singleTask
    • singleInstance

Activity的启动模式

  • 在实际的项目当中,我们应该根据特定的需求给每个Avtivity指定恰当的启动模式
  • 启动模式一共包含四种:standard,singleTop,singleTask,singleInstance
  • 指定启动模式的方法:在AndroidManifest.xml中通过标签指定android:launchMode属性来选择相应的启动模式.

standard

  • standard是Activity默认的启动模式
  • 在standard启动模式下,每当启动一个新的Activity就会在返回栈当中入栈,并且处在栈顶的位置.
  • 对于使用standard启动模式的Activity,系统不会在乎返回栈中是否存在这个Activity,每次启动都会创建一个该Activity的实例
  • 体会一下standard启动模式
    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("FirstActivity", this.toString())setContentView(R.layout.first_layout)button1.setOnClickListener {val intent = Intent(this, FirstActivity::class.java)startActivity(intent)}}
  • 这段代码是在FirstActivity中调用FirstActivity,通过测试可以发现每次点击按钮都会创建一个新的Activity实例.
  • standard模式原理运行图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJqFIOc2-1669222666256)(C:/Users/zhengbo/%E6%88%91%E7%9A%84%E5%AD%A6%E4%B9%A0/Typora%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%AE%89%E5%8D%93/image-20221124000616313.png)]

singleTop

  • 在有些时候,standard会显得不太合理,因为明明栈顶已经存在相应的实例了,我们应该直接复用即可,可是standard不管三七二十先创建新的实例.
  • 针对这一点,singleTop做了优化,当返回栈的栈顶是我们需要创建的实例的时候,那么则认为可以直接使用它.不会再创建新的Activity实例.
  • 在AndroidManifest.xml中修改Activity的启动模式
        
  • android:launchMode="singleTop"来指定Activity的启动模式
  • 此时我们再点击按钮,无论点击多少次,都只会创建一个FirstActivity的实例,仅按一次返回键就可以退出程序
  • 不过当FirstActivity并未处在栈顶的时候,再启动FirstActivity还是会创建新的实例.
  • singleTop的原理模式图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dd6BSPnd-1669222666258)(C:/Users/zhengbo/%E6%88%91%E7%9A%84%E5%AD%A6%E4%B9%A0/Typora%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%AE%89%E5%8D%93/image-20221124001952406.png)]

singleTask

  • 使用singleTop可以很好的解决重复创建栈顶的Activity的问题,但是当Activity并没有处在栈顶的时候就还是会存在重复创建Activity的情况.
  • 那么此时singleTask就是用来保证某个Activity在程序的上下文中只存在一个实例.
  • 当Activity的启动模式指定为singleTask的时候,每次启动Activity的时候,系统首先会在返回栈中检查是否存在该Activity的实例,如果存在,就将这个Activity之上的所有Activity进行出栈,如果没有发现存在该Activity的实例,那么就会创建一个该Activity的实例.

singleInstance

  • singleInstance是四种启动模式当中最特殊也是最复杂的一个.
  • 指定为singleInstance启动模式的Activity会启动一个新的返回栈来管理这个Activity
  • 当我们的Activity是多个程序程序所共享的时候,就应该需要用到这种启动模式,因为其他三种的启动模式都是自己独有的返回栈来管理Activity,所以不能将一个Activity进行共享.
  • 实践singleInstance

  • 修改FirstActivity中的代码
    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//在onCreate方法中打印返回栈的idLog.d("FirstActivity", "This is $taskId")setContentView(R.layout.first_layout)//启动ThirdActivityval intent = Intent(this, SecondActivity::class.java)startActivity(intent)}}
  • 修改SecondActivity中的代码
    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("SecondActivity", "Task id is $taskId")setContentView(R.layout.second_layout)button2.setOnClickListener {val intent = Intent(this, ThirdActivity::class.java)startActivity(intent)}}
  • 修改ThirdActivity中的代码
    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("ThirdActivity", "Task id is $taskId")setContentView(R.layout.third_layout)}
  • 运行代码,依次点击按钮,通过打印的日志发现FirstActivity和ThirdActivity的task id是一样的,但是SecondActivity的task id是不同于其他两个
  • 这个说明SecondActivity确实是存在于一个单独的返回栈当中的,而且在这个栈当中只存在SecondActivity这一个Activity

在这里插入图片描述

  • singleInstance模式原理如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q2pbRM84-1669222666261)(C:/Users/zhengbo/%E6%88%91%E7%9A%84%E5%AD%A6%E4%B9%A0/Typora%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%AE%89%E5%8D%93/image-20221124005500093.png)]

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...