Activity是安卓与用户交互的基础活动单元,它与Service、Broadcast、Content Provide并成为android的4大基础组件,其实它与iOS里面的UIViewController很相似,下面介绍Activity涉及的主要知识点:
1.activity的启动与结束
从Activity A跳转到Activity B, 然后再从B返回到A,所经历的代码都有哪些?
在Activity A中,核心代码是 创建一个意图对象,其中的两个参数是一个源activity,另外一个是目标activity
public void onClick(View view) {
// 创建意图对象
Intent intent = new Intent(this, MainActivity2.class);
// 跳转
startActivity(intent);
}
在Activity B界面,如果返回,则简单的执行finish()
public void onClick(View view) {
finish();
}
2.Activity的生命周期
介绍下上面案例 A到B,然后从B再返回A的过程中的生命周期变化
- onCreate创建活动,此时会把页面布局加载进内存,进入了初始状态
- onStart开启活动, 此时会把页面活动显示在屏幕上,进入了就绪状态
- onResume回复活动,此时活动页面进入活动状态能够与用户正常交互,例如相应用户点击动作、允许用户输入文字
- onPause暂停活动,此时页面进入暂停状态,也就是退回状态,无法与用户正常交互
- onStop停止活动,此时页面将不再屏幕上显示
- onDestroy销毁活动,此时回收活动占用的系统资源,把页面从内存中清除
- onRestart重新启动,处于停滞状态的活动,重新开启
启动应用,首先打印的是:
MainACtivity onCreate:
MainACtivity onStart:
MainACtivity onResume:
然后点击跳转按钮后,控制台打印
MainACtivity onPause:
MainActivity2 onCreate:
MainActivity2 onStart:
MainActivity2 onResume:
MainACtivity onStop:
最后点击Activity里面的返回,查看打印:
MainActivity2 onPause
MainActivity onRestart:
MainActivity onStart:
MainActivity onResume:
MainActivity2 onStop:
MainActivity2 onDestroy:
从日志打印可以看到,当两个界面跳转时候,完整的生命流程是这样的:
onCreate:A --> onStart:A --> onResume:A --> onPause:A --> onCreate:B
--> onStart:B --> onResume:B --> onStop:A --> 点击返回 --> onPause:B --> onRestart:A --> onStart:A --> onResume:A --> onStop:B --> onDestroy:B
3.Activity的启动模式
首先来说,启动模式有两种,
- 一种是在androidManifest.xml中设置,给activity标签设置android:launchMode
- 还有一种是在代码中调用Intent对象的setFlags方法
那么启动模式具体有哪几种呢?大致分为以下四种方式
- standard 标准模式,一直push就会一直压栈,先进后出的顺序
- singleTop 栈顶如果有一个相同的活动,那么就直接复用当前的活动,而不会出现类似于A->B->B这种栈顶两个一样的活动
- singleTask 保证整个栈中相同的活动只有一次,比如现有栈机构 A->B->C->,如果接下开再跳转B,那么就会清除掉栈中B之上的活动,压B会出现 A->B这种栈结构,而不是A->B->C->B
- singleInstance 启动新的活动时,将该活动放入一个新的栈中,原栈实例保持不变
默认情况下是标准模式,一般都是在代码中设置跳转模式,如果再静态代码中设置,会导致所有的都是该引用模式,对于个别定制化的确实不太方便,