四大组件之一activity
- 生命周期
- Activity组件之间的通信
- 启动模式
- 源码解读 startActivity
Activity4中形态
- Active: Activity 处于栈顶
- Paused: 可见但是不可交互
- Stopped: 不可见
-
Killed: 系统回收
Activity是与用户交互的接口 Android系统通过activity栈的形式来管理activity Active/Paused/Stopped/Killed
Activity生命周期
- onCreate()
- onStart() // 处于可见状态 但是不能交互
- onResume() //activity处于可见 并且可以交互
- onPause()
- onStop()
- onDestroy()
- onRestart() // 正常启动情况下不会执行此方法
Activity异常情况下生命周期&
出现异常会自动调用
1. onSaveInstanceState() //存储数据
2. onRestoreInstanceState()// 数据恢复
onCreate 和 onRestoreInstanceState区别
onCreate 需要判断Bundle是否为空
onRestoreInstanceState 不需要判断Bundle是否为空
Activity之间的通信
- Intent/Bundle
- 类静态变量
- 全局变量
Activity与Fragment通信
1. Bundle
2. 直接在Activity中定义方法
setArguments()
getAtguments()
Fragment 在onAttach方法中直接调用activity方法获取数据
Fragment与activity通信
Fragment将数据传递给activity
1. 在fragment中定义一个内部接口
2. fragment的方法onAttach()
3. 调用onDetach()这个时候要 把传递进来的activity对象释放掉
Activity与service之间通信
1. 绑定服务 利用serviceConnection类
2. 简单通信 利用intent进行船只
3. 定义一个callback接口来监听服务中的进程的变化
Activity启动模式
standard
singleTop
singleTask
singleInstance
standard 标准模式
1. 在不指定启动模式的前提下 系统默认使用的事该模式启动Activity
2. 每次启动一个activity都会重新创建一个新的实例
3. Activity它的onCreate onStart onResume方法每次都会执行
singleTop 栈顶复用
1. 当前栈中已有该activity实例并且该实例位于栈顶时 并且传入intent调用 onNewIntent 方法会被调用
2. 当前栈中已有该activity实例但是该实例不在栈顶时 和标准的启动一样
3. 当前栈中不存在该activity实例 和标准的启动一样
singleTop 应用场景
IM对话框
新闻客户端推送
SingleTask 栈内复用模式
1. 首先会根据taskAffinity 去寻找当前是否存在一个对应名字的任务栈 (taskAffinity 任务相关性)
2. 如果不存在 则会创建一个新的task activity实例会加入这个栈
3. 如果存在 则得到该任务栈 查找该任务栈中是否存在该activity实例 (会将这个实例上方的activity全部移除栈)
SingleTask 应用场景
应用的主界面
SingleInstance 独立的任务栈 整个内存中只有一个实例 多个app共享一个实例
SingleInstance 特性
1. 以SingleInstance模式启动的activity具有全局唯一性
2. 如果再启动这样的activity时,已经存在一个实例 会复用这个实例
3. 以 SingleInstance模式启动的activity 具有独占性 独自占用一个任务栈
SingleInstance 应用场景
呼叫来电