Activity的概念
Android系统Activity通过调用与其生命周期的特定阶段相对应的特定回调方法来启动实例中的代码。
生命周期
当用户浏览,退出和返回您的应用时,应用中的Activity实例会在其生命周期中转换为不同的状态。的Activity类提供了一些回调允许活动知道一个状态已经改变的:该系统被创建,停止或恢复活性,或破坏该活动所在的过程。
![](https://img.haomeiwen.com/i18945157/c8cdec276171f9d8.png)
管理Activity生命周期的六个回调
在一个Activity的生命周期中,我们可以使用一系列的回调来处理APP不同状态之间的转换.
onCreate()
每一个应用程序都必须实现这个回调,该回调在系统创建活动时触发。在实现时应该初始化该活动的基本组件,在onCreate()方法中,你将执行基本应用程序启动逻辑,该逻辑应该在活动的整个生命周期中仅发生一次。例如,您的应用程序应创建视图并将数据绑定到列表。最重要的是,您必须在此处调用setContentView(),作为定义XML文件并将其传递给的替代方法。当调用完onCreate()后,必须调用onStart()。
onStart()
当活动退出onCreate()时,将进入开始状态,并且活动性变得对用户可见。这个回调函数包含活动最终准备到达前台并且变为互交式的内容。
当活动进入启动状态时,任何与活动生命周期相关的生命周期感知组件都将收到该ON_START事件。
方法非常快速地完成,并且与Created状态一样,活动不会保持驻留在Started状态。一旦此回调结束,活动就进入 Resumed状态,系统将调用该onResume方法。
onResume()
系统在活动开始与用户交互之前调用此回调函数。此时,活动位于活动堆栈的顶部,并捕获所有用户输入。应用程序的大多数核心功能都是在该onResume()方法中实现的。
这是应用程序与用户交互的状态。该应用程序保持这种状态,直到某些事情成为焦点远离应用程序。例如,这样的事件可能是接收电话,用户导航到另一个活动,或者设备屏幕关闭。
当活动进入恢复状态时,任何与活动生命周期相关的生命周期感知组件都将收到该ON_RESUME事件。这是生命周期组件可以启用任何需要在组件可见且在前台运行时运行的功能的位置,例如启动摄像头预览。
如果活动从“暂停”状态返回“已恢复”状态,则系统再次调用onResume()方法。因此,你应该实现onResume()初始化,在此期间释放的组件onPause()并执行每次活动进入“恢复”状态时必须发生的任何其他初始化。
onPause()
系统将此方法称为用户离开您的活动的第一个指示(尽管并不总是意味着活动正在被销毁); 它表示活动不再在前台(尽管如果用户处于多窗口模式,它仍然可见)。使用该onPause()方法暂停或调整Activity在处于暂停状态时不应继续(或应继续适度)的操作,并且您希望很快恢复。活动可能进入此状态的原因有多种。
这个回调函数当活动失去焦点并且进入暂停状态,系统就会调用这个函数,例如,当用户点击“后退”或“最近”按钮时,会出现此状态。当系统调用onPause()时,从技术上讲,您的活动仍然部分可见,但通常表示用户正在离开活动,并且活动很快将进入“已停止”或“已恢复”状态。
如果用户期望UI更新,则处于暂停状态的活动可以继续更新UI。这种活动的示例包括示出导航地图屏幕或媒体播放器播放的活动。即使这些活动失去焦点,用户也希望他们的UI继续更新。
一旦onPause()执行完成,下一个回调就是onResume()活onStop(),取决于活动进入暂停状态后发生的情况。
onStop()
当活动不再对用户可见时, 系统会调用。这可能是因为活动正在被破坏,新活动正在开始,或者现有活动正在进入恢复状态并且正在覆盖已停止的活动。在所有这些情况下,停止的活动根本不再可见。
当活动进入停止状态时,任何与活动生命周期相关的生命周期感知组件都将收到该ON_STOP事件。这是生命周期组件可以停止在组件在屏幕上不可见时不需要运行的任何功能的地方。
在onStop()方法中,应用程序应释放或调整应用程序对用户不可见时不需要的资源。
系统调用的下一个回调是onRestart(),如果活动返回与用户交互,或者onDestroy()此活动是否完全终止。
onRestart()
当处于“已停止”状态的活动即将重新启动时,系统将调用此回调。onRestart()从停止时恢复活动状态。onStart()回调始终紧随其后 .
onDestroy()
系统在销毁活动之前调用此回调。此回调是活动收到的最后一个回调。onDestroy()通常实现以确保在活动或包含它的进程被销毁时释放所有活动的资源。
当活动进入销毁状态时,任何与活动生命周期相关的生命周期感知组件都将收到该ON_DESTROY事件。这是生命周期组件可以在销毁活动之前清除所需的任何内容的地方。
而不是在您的Activity中放置逻辑来确定它被销毁的原因,您应该使用一个ViewModel对象来包含您的Activity的相关视图数据。如果由于配置更改而将重新创建Activity,则ViewModel不必执行任何操作,因为它将被保留并提供给下一个Activity实例。如果不重新创建Activity,则ViewModel将调用该 方法,以便在销毁之前清除所需的任何数据。
网友评论