【AndroidDevelop 03】探究Activity

419 阅读4分钟

什么是Activity

活动就是与用户打交道的界面,我们在App里看到的一个个界面,就是一个个活动。

关于Activity的知识点,包含用法、生命周期、启动模式

生命周期

  • 正常情况下的生命周期:是指有用户参与的情况下,用户的操作比如进入活动、离开活动。

image.png

onCreate:活动刚被创建,生命周期的第一个方法,在这个方法中可以执行一些初始化的操作,如setContentView()
onStart:活动由不可见变为可见
onResume:已经展示到前台,准备好与用户交互了(onstart一定发生在onresume之前)
onPause:系统准备切换到另一个活动时执行,做一些数据存储、释放资源的工作,但注意不能太耗时
onStop:活动完全不可见时调用。当如果启动一个新的活动为一个对话框时,当前的活动没有完全被隐藏,onstop不会被调用,但是onpause会被调用。
onDestory:活动被摧毁。
onRestart:由完全不可见到可见的情况下。

注意点:旧Activity的onPause先调用,Android官方文档对onPause的解释有这么一 句:不能在onPause中做重量级的操作,因为必须onPause执行完成以后新Activity才能Resume,从这一点也能间接证明我们的结论。通过分析这个问题,我们知道onPause和onStop都不能执行耗时的操作,尤 其是onPause,这也意味着,我们应当尽量在onStop中做操作,从而使得新Activity尽快显示出来并切换到前台。

  • 异常情况下的生命周期:是指活动由于某种异常被系统回收或者页面布局改变(如由竖屏转为横屏的情况下)导致的活动被销毁。

    1. 资源相关的系统配置导致的Activity被杀死重建。 image.png 我们都知道,当把一张照片放到drawable目录的时候,根据Resource就可以去获取这张图片,为了兼容不同的设备,可以设置不同的目录。比如横屏与竖屏加载不同的资源文件,当由横屏转到竖屏的时候,Activity就会被摧毁和重建。生命周期如上图所示。

      当然,Activity被摧毁的过程中,onPause、onStop、onDestory都会被执行。同时也会去执行onSaveInstanceState来保存当前activity的状态,当重写创建后,把Activity销毁时保存的Bundle对象作为参数传递给onRestoreInstanceState与onCreate方法。

      同时onSaveInstanceState以及onRestoreInstanceState,系统会自动做一定的恢复工作,系统会默认保存当前Activity的视图结构帮助我们恢复。其保存的数据Activity会委托Window去保存。

    2. 系统资源不足导致优先级低的Activity被杀死。

启动模式

Lanuch Mode

首先理解一下任务栈,默认情况下,每启动一个Activity,都会将其放入任务栈中,点击Activity中的back或者finsha(),该Ac会出栈。关于任务栈的原理后期再出文章讲解。下面先简单介绍一下各个任务栈。

  • standard:系统的默认模式,每启动一个Ac,都会经历onCreate,onStart,onResume,并且如果是A启动了B,那么B在A的任务栈中。一个任务栈可以有多个实例,每个实例也可以属于不同的任务栈。
  • signleTop:栈顶复用模式。如果被启动的栈在当前栈顶,则不会再被创建,同时会执行该栈顶活动的onNewIntent回调方法。
  • singleTask:如果当活动的启动模式指定为singleTask,每次启动该活动时系统会检查任务栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动出栈,如果没有发现就会创建一个新的活动实例。
  • singleInstance:单实例模式。启动这个模式的Ac会新建一个返回栈来管理这个活动。这样做的意义是:当我们的程序有一个活动希望与其他程序共享时,前面三种模式肯定不行,被访问的活动不一定在栈顶,在这种模式下会有一个单独的返回栈来管理活动,不管是哪个应用程序来访问,都共用一个返回栈解决了共享活动实例的问题。

活动间传递数据