第一行代码2.5-活动的启动模式
来源:互联网 发布:淘宝类似图片怎么搜索 编辑:程序博客网 时间:2024/06/05 18:34
1、standard
之前已经学习了安卓的活动是返回栈管理的,新建的活动都会在栈顶。在这种模式下创建的活动,系统不会管在返回栈中是否存在,每次都会创建新的实例。
比如现在新建一个FirstActivity活动,然后定义一个按钮,每次点击这个按钮会跳转到FirstActivity,也就是自己。下面是点击两次跳转之后的结果:
2、singleTop
我们发现前一种模式的不合理:命名活动已经在栈顶了,为什么还要新建同一个活动呢?所以singleTop就解决了这个问题:当新建活动时,如果这个活动已经在栈顶,就不新建。
还是刚刚的程序,再次点击按钮,发现LogCat里面没有输出新的信息。
现在修改这个程序:点击跳转的时候跳转到另一个活动SecondActivity。先从FirstActivity进入SecondActivity,再回到FirstActivity。这个例子是为了说明singleTop解决了同一个活动在栈顶的问题,但没有解决不在栈顶的情况:
3、SingleTask
当活动的启动模式指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
在之前的例子的基础之上,首先修改FirstActivity的启动方式为SingleTask,然后修改FirstActivity的onRestart函数:
此时重复之前的步骤,得到下面的LogCat:
这个例子说明了singleTask的模式可以减少重复的活动,但是也说明这个模式可能会带来的问题:之前在写拍照活动的时候,如果把调用拍照活动的底层活动定义为singleTask,会导致拍照之后,程序崩溃的情况。原因我认为可能是拍照的活动完成后,调用底层活动,然后把拍照的活动destroy了。最后要调用onActivityResult的时候就会发生错误。
所以singleTask看起来很美好,却不是随便可以用的!
4、singleInstance
这个模式主要用在不同的程序共享同一个活动。之前的三种模式没办法做到,因为每一个程序都有自己的返回栈,不可能共享同一个活动。而使用singleInstance启动的活动会有单独的返回栈。
下面开始修改工程:首先更改SecondActivity的启动方式为singleInstance,然后修改FirstActivity中的代码:
SecondActivity也是这样修改。然后创建ThirdActivity,同样按照上面的代码修改。
现在从FirstActivity跳转到SecondActivity,再跳转到ThirdActivity,看LogCat的结果:
可以看到SecondActivity的taskid和其他两个活动都不同,证明SecondActivity确实有单独的返回栈,而且这个返回栈只有它一个活动。
现在如果点击返回,ThirdActivity会回到FirstActivity因为它们两个在同一个返回栈中,再次点击返回才会回到SecondActivity。
这里可以下载源代码
- 第一行代码2.5-活动的启动模式
- 活动的四种启动模式(第一行代码总结)
- 第一行安卓代码——活动的启动模式2.5
- 第一行代码学习笔记-第二章 探究活动-4.活动的启动模式
- Android Studio 活动的启动模式 standard singleTop singleTask singleInstance 第一行代码
- (第一行代码笔记)活动的4种启动模式详解
- 《第一行代码》启动活动最佳写法
- 活动的最佳实践--第一行代码
- 第一行代码-活动的生存周期
- 第一行代码 第二章 Activity的启动模式
- android启动活动(第一行代码android学习笔记)
- Android启动活动的最佳写法,摘录自《第一行代码——Android》
- Android Studio 活动的最佳实践 知晓当前是在哪一个活动 随时随地地进入程序 启动活动的最佳写法 第一行代码
- 活动和服务之间的通信 第一行代码
- 第一行代码2.6-活动的最佳实践
- 浅谈活动的生命周期(读《第一行代码》有感)
- 《第一行代码》自学笔记-活动的基本用法
- 第2章 活动的启动模式
- 通过Runtime类启动外部文件
- hibernate之xxx.hbm.xml配置详解
- js jsonp跨域请求实现
- win7 .net加解密模块出错,System.Reflection.TargetInvocationException
- hibernate之hibernate.cfg.xml详解
- 第一行代码2.5-活动的启动模式
- svn分支开发与主干合并(branch & merge)
- 关于SpringAOP的一些事
- POJ 1080(最长公共子序列)
- hive 安装和配置 详细教程
- chown, chmod
- hibernate开发环境搭建
- systemtap dump kernel function call stack and print function parameters
- uva1382- Distant Galaxy (枚举)