一、概要
1. 建立Activity:
1.1 继承Activity类并重写重要函数
创建相关布局文件
重写onCreate()
和onPause()
等需要的函数,加载布局
1.2 注册
在AndroidManifest.xml
文件中注册相关Activity
在<activity>
标签中添加相应Activity的需要的<intent-filter>
内容
2. 启动Activity:
2.1 启动方式
显示Intent
:通过指定目标活动名称来启动
隐式Intent
:通过指定action
和category
来寻找合适的活动来启动
2.2 数据传递
向下一个活动传递数据:Intent
数据存取的一些操作
返回数据给上一个活动:通过startActivityForResult()
方法启动下一个活动,并重写onActivityResult()
处理返回数据
2.3 启动模式
- standard
- singleTop
- singleTask
- singleInstance
2.4 生命周期
2.4.1 管理Activity生命周期
完整生存期:在onCreate()
到onDestory()
之间的各种操作
可见生存期:onStart()->onResume()->onPause()->onStop()->onRestart()
该活动可以被用户看见
前台生存期:onResume()->onPause()
该活动在这期间可以和用户进行交互
2.4.2 存储Activity的状态:通过onSaveInstanceState()
方法存储Activity的状态,保障活动被回收后能回复数据
2.4.3 处理设定的变更:横竖屏切换的生命周期的变化
3. 关闭Activity:
可以通过finish()
方法关闭此Activity,或是通过finishActivity()
关闭之前启动的某个Activity
二、重点
1. Intent的使用
1.1显式Intent启动的传值与取值
- 传值
传给下一个activity:在第一个活动中用putExtra("key",value)
将数据暂存到Intent中,通过Intent传到下一个activity。
传给上一个activity:如果前一个activity需要从当前activity获得结果,则需要在当前activity的finish()
之前用setResult(resultCode,Intent)
方法返回结果,存数据方法与上面一致。 - 取值
从上一个activity取:通过getIntent()
获得Intent,并通过相关数据类型的get...("key")
和键名获取数据。
从下一个activity取:启动下一个activity的时候通过startActivityForResult()
方法,并重写onActivityResult()
方法,在该方法内获取数据并处理。
1.2隐式Intent启动的传值与取值
与显示的大致差不多,只不过是没有指定具体的下一个activity,在启动的时候是通过相应的action,一般常在找联系人、找图片......中用到
2. 理解生命周期
2.1 生命周期的进行路径和前后联系
说再多不如上图:
2.2 关于存储activity状态
通过重写onSaveInstanceState()
方法,将数据以key-value的形式暂存到saveInstanceState
中,当activity需要重建的时候可以在onCreate()
或是onRestoreInstanceState()
中恢复。
上图:
2.3 关于状态变化的处理
横竖屏切换时activity生命周期的变化
均会经历有onCreate()
和onDestory()
完整的生命周期
3. 关注启动方式和Task
一个Task是一系列Activity的集合,这个集合是以堆栈的形式来组织的,遵循后进先出的原则。
3.1 启动模式与Flag以及返回栈
启动模式在AndroidManifest.xml
文件中更改
也可以通过在Intent里使用addFlag()
方法,但对于AndroidManifest.xml
里已经定义了的(非standard模式)不生效。
-
standard:
默认模式,每当启动一个新的活动,都会创建该活动的一个新的实例。
与使用Intent里的FLAG_ACTIVITY_NEW_TASK
类似(官网好像有点问题) -
singleTop
当启动一个活动时,如果发现返回栈的栈顶是该活动,则直接使用不新建;如果栈顶不是该活动,则新建。
与使用Intent里的FLAG_ACTIVITY_SINGLE_TOP
类似 -
singleTask
当启动一个活动时,先检查返回栈中是否有该活动,如果有,则将该活动之上的全部出栈,直接使用该活动;如果没有,则新建。
与使用Intent里的FLAG_ACTIVITY_CLEAR_TOP
类似(官网好像有点问题) -
singleInstance
当启动这个模式的活动时,为这个Activity新建一个返回栈。这种模式用图看会好理解一些,图中SecondActivity则是这种模式。
3.2 关于taskAffinity
- 第一种情况:当某个应用的activity进入后台,当一个和它有相同affinity的Task进入前台时,它会重新宿主,进入到该前台的task中。(仅限于根Activity,与
allowTaskReparenting
属性没什么关系,而且后者不会被创建) - 第二种情况:如果通过Intent的
FLAG_ACTIVITY_NEW_TASK
加载某个Activity时,它会首先检查是否存在与自己taskAffinity
相同的Task,如果存在,那么它会直接进入到该Task中,如果不存在则重新创建Task。
网友评论