Android中关于Activity的相关知识

99 阅读3分钟

Activity是安卓与用户交互的基础活动单元,它与ServiceBroadcastContent 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 启动新的活动时,将该活动放入一个新的栈中,原栈实例保持不变

默认情况下是标准模式,一般都是在代码中设置跳转模式,如果再静态代码中设置,会导致所有的都是该引用模式,对于个别定制化的确实不太方便,