Activity的概念
1.Activity - 与用户交互的接口
2.Android系统是通过Activity栈的形式来管理Activity的
activity任务栈.png
Activity的4种形态:
1.Active:Activity处于栈顶
2.Paused:可见但不可交互
3.Stopped:不可见
4.Killed:系统回收掉
Activity的生命周期
activity的生命周期.png1. 以上为正常情况下activity的生命周期流程图。
2. 下面总结异常情况下生命周期流程:
3. 相比正常情况生命周期,异常终止情况下生命周期多了两个方法:` onSaveInstanceState(Bundle outState)` 、` onRestoreInstanceState(Bundle savedInstanceState)`。这两个方法在activity异常情况下,系统会自动调用前者来保存数据信息。当系统重新启动的时候,会调用后者将保存的数据信息通过bundle参数传递过来。
4. ` onCreate(@Nullable Bundle savedInstanceState)` ` onRestoreInstanceState(Bundle savedInstanceState)`,两个方法参数都有bundle,二者选其一的话,推荐后者,后者中的bundle一定不为空,而前者里面的bundle有可能为空。
总结:
1.activity正常启动: onCreate - onStart - onResume
2.点击back回退: onPause - onStop - onDestroy
3.打开新的activity: onPause - onStop
4.activity异常: onSaveInstanceState来保存数据
5.activity重新创建: 调用onRestoreInstanceState来恢复数据
Activity组件之间的通信
activity与activity之间的通信:
1. Intent/Bundle
2. 类静态变量
3. 全局变量
activity与fragment之间的通信:
一:activity将数据传递给fragment:
1.bundle
2.直接在activity中定义方法
二:fragment将数据传递给activity:
1.接口回调:
1.1 在fragment中定义一个内部回调接口
1.2 fragment的方法onAttach()中判断是否实现接口
1.3 调用onDetach方法,这个时候要把传递进来的activity对象释放掉
activity与service之间的通信:
1. 绑定服务,利用ServiceConnection接口传递数据
2. 简单通信,利用Intent进行传值
3. 定义一个callback接口来监听服务中的进程的变化
Activity的四种启动模式
1.standard:
1.1 在不指定启动模式的前提下,系统默认使用该模式启动activity。
1.2 每次启动activity都会重新创建一个新的实例。
1.3 重新创建的activity会依次调用onCreate(),onStart(),onResume()方法。
2.singleTop:
2.1 当前栈中已经有该activity的实例并且该实例位于栈顶时,复用该实例。
2.2 当前栈中已经有该activity的实例但是该实例不在栈顶时,创建新实例,不复用。
2.3 当前栈中不存在该activity的实例时,创建新实例,不复用。
2.4 应用场景:IM对话框、新闻客户端推送。
3.singleTask:
3.1 首先会根据taskAffinity(任务相关性)去寻找当前是否存在一个对应名字的任务栈。
3.2 如果不存在,则会创建一个新的task,并创建新的activity实例,加入任务栈中。
3.3 如果存在,则得到该任务栈,查找任务栈中是否存在该activity实例,存在,弹出该activity以上的所有实例。不存在,创建新的activity实例加入任务栈。
3.4 应用场景:应用的主界面。
4.singleInstance:
4.1 以singleInstance模式启动的activity具有全局唯一性。
4.2 如果在启动这样的activity时,已经存在了一个实例,会把所在的任务调度到前台,复用该实例。
4.3 以singleInstace模式启动的activity实例具有独占性,独自占用一个任务栈。
4.4 应用场景:呼叫来电。
网友评论