1、Activity四种状态:
- active:Activity处于栈顶、可见、可与用户交互
- paused:可见但不可交互、内存足够,状态保存,内存不足可被系统回收
- stopped:不可见、内存足够,状态保存,内存不足可被系统回收
- killed:被系统回收
总结:
- Activity是Android系统与用户交互的接口
- Android系统是通过Activity栈的形式来管理Activity
2、Activity 生命周期分析:(正常情况)
Activity启动
->onCreate()做初始化操作例如:setContentView设置布局资源、数据的加载、图片预加载等
->onStart()处于用户可见状态,但不能与用户进行交互
->onResume()处于前台界面,可以与用户进行交互
->onPause() Activity正在停止、被部分覆盖
->onStop() Activity被完全覆盖、不可见
->onRestart() Activity正在重新启动
->onDestory() Activity正在被销毁、回收、释放资源
3、异常情况下Activity生命周期
系统自动调用
◆ onSaveInstanceState():保存当前Activity信息
◆ onRestoreInstanceState():恢复保存的数据,Bindle参数不为空,onCreate()方法中需要对Bindle参数进行非空判断
总结:
◆ Activity正常启动:onCreate---->onStart----->onResume
◆ 点击back键回退:onPause----->onStop----->onDestory
◆ 打开新的Activity:onPause---->onStop
◆ Activity异常:onSaveInstanceState保存数据
◆ Activity重新创建:onRestoreInstanceState 恢复数据
4、Activity之间通信
◆ Intent/Bindle(key/value形式):intent.putExtras(bindle)
◆ 类静态变量
◆ 全局变量
5、Activity与Fragment通信
◆ Activity将数据传递给Fragment
- Bindle:例:fragment.setArgument(bindle);
目标fragment中调用getArgument获取bindle对象
- 直接在Activity中定义方法
◆ Fragment将数据传递给Activity (接口回调)
- 在fragment中定义一个内部回调接口
- Fragment的方法onAttach()
- 调用onDetach方法,这个时候要把传递过来的activity对象释放掉,避免内存泄露
6、Activity与Service数据通信
◆ 1、绑定服务,利用ServiceConnection类
实现ServiceConnection接口,重新方法
onServiceConnected() : 绑定成功时
onServiceDisconnected() : 进程崩溃时
◆ 2、简单通信,利用Intent进行传值
只能传递简单类型数据,性能上没有优势
◆ 3、定义一个callback接口来监听服务中的进程的变化
7、Activity启动模式
◆ 1、Standard 默认情况启动模式
每次都会创建一个新的activity实例
◆ 2、singleTop 栈顶复用模式
当activity处于栈顶时不会创建activity,若不在栈顶则会重新创建Activity
应用场景:1、IM对话框 2、新闻客户端推送
◆ 3、singleTask 栈内复用模式
当任务栈中存在则将activity置于栈顶,并将这个activity以上的所有activity销毁(即clearTop)
- 会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈
- 如果不存在,则创建一个新的task
- 如果存在,则在该任务栈中查找是否存在该Activity实例
应用场景:应用主界面
◆ 4、singleInstance 该模式下的activity在整个系统中有且只有一个实例,并且独享一个任务栈,即该任务栈中只有一个Activity
应用场景:呼叫来电