首页 > 编程知识 正文

activiti有什么用,属于activity生命周期的方法

时间:2023-05-04 01:40:25 阅读:110230 作者:2375

Activity是Android组件中最基本、最常用的四个主要组件之一,在开发过程中涉及到的组件最多,因此要了解、正确理解和应用Activity的生命周期本节介绍Activity的生命周期。

生命周期

活动在系统中由活动堆栈进行管理。 新活动开始时,它将被推到堆栈的顶部,成为正在运行的活动。 上一个事件始终位于此事件下的堆栈中,并且在新事件结束之前不会移动到前台。

从活动开始到结束经历各种各样的状态。 从一个状态到另一个状态的变化,从无到有,再到无,这样,在这个过程中经历的每个状态叫做生命周期。 Activity有自己的生命周期。 这意味着在我们展示当前界面的过程中,它本身也经历了不同的阶段来准备、处理和向用户展示当前的Activity。 当开发者为了向界面提供帅气的效果和功能而进行特殊处理时,这些生命周期是必不可少的。

每个生命周期状态的说明

方法

说明

用途(在当前接口上播放视频的示例) )。

下一个方法

onCreate () )

第一次创建Activity时调用。 在包含以前活动的冻结状态信息bundle包中提供此方法(如果有)。

执行一系列初始化操作,如创建View、加载视频数据等。

onStart () )

onRestart () )

在Activity停止后调用,在重新开始之前

在活动停止后重新启动活动时调用,用于停止后的重新启动操作。

onStart () )

onStart () )

当Activity显示在用户面前时调用。 事件出现在前台后立即onResume (),如果事件被直接隐藏,则为onStop ) )。

这个方法也不常见。

onresume(oronstop ) )

onResume () )

在Activity开始与用户交互时调用。 此时您的活动位于活动堆栈的顶部,用户输入将访问它。

要在暂停后重新开始,请使用此方法执行一些操作,例如继续播放视频。

onPause () )

onPause () )

系统恢复以前的活动时。 这是常用于将未保存的更改信息作为永久数据提交、停止动画或消耗CPU的典型代表。 要实现这种方法,必须特别迅速。 在此方法返回之前,不会恢复下一个活动。 如果活动返回到前台,则接下来调用onResume (),如果要将其隐藏在用户看不到的地方,则调用onStop ()。

此方法非常重要,用于信息永久存储操作和停止占用CPU资源的操作,例如记录视频播放进度和暂停视频播放操作。

onResume or onStop (

onStop () )

当另一个活动重新启动,活动已完全覆盖且用户看不到Activity时调用。 如果新事件开始,已结束的事件重新开始,或者事件被丢弃,则会发生这种情况。 如果活动要恢复与用户的交互,请调用onRestart ();如果活动要放弃,请调用onDestory ()。

界面将被隐藏或销毁,以执行重要或未保存信息的保存操作。 但是,不要花太多时间。 保存用户信息等操作,以及用户这次看到的视频地址和时间,在下次打开此界面时更容易继续播放。

onrestart(oronresume ) )

onDestory () )

Activity被销毁钱的最后一次调用的方法。 发生此方法的原因是活动即将结束,或者在活动中调用finish )方法,或者系统会临时丢弃实例以节省空间。 您可以使用isFinishing ()方法来区分这两个场景。) .

接口被丢弃,释放一些实例以节省空间,例如放置空的List集合。

下图显示了activity的重要状态更改路径。 矩形中的代表表示活动在两种状态之间变化时可以实现的回调方法。 彩色椭圆形表示activity的主要状态。

Activity生命周期. png

方法

说明

用途(在当前接口上播放视频的示例) )。

下一个方法

onCreate () )

第一次创建Activity时调用。 在包含以前活动的冻结状态信息bundle包中提供此方法(如果有)。

执行一系列初始化操作,如创建View、加载视频数据等。

onStart () )

onRestart () )

在Activity停止后调用,在重新开始之前

在活动停止后重新启动活动时调用,用于停止后的重新启动操作。

onStart () )

onStart () )

当Activity显示在用户面前时调用。 事件出现在前台后立即onResume (),如果事件被直接隐藏,则为onStop ) )。

这个方法也不常见。

onresume(oronstop ) )

p>

onResume()

当Activity将开始与用户进行交互时调用。在这个时间点你的活动将会在活动堆栈的顶端,用户输入将会访问它。

暂停后恢复我们会在该方法中进行一些操作,例如视频继续播放。

onPause()

onPause()

当系统将要恢复一个之前的活动。这是一个有代表性的常常用于提交未被存储的改动信息为持久数据,停止动画和消耗CPU的东西等。实现该方法必须要特别的迅速,因为在此方法返回之前,下一个活动将不会恢复。如果活动将返回到前台则接下来调用onResume(),如果要隐藏到用户看不见的地方时,则调用onStop();

该方法十分重要,用来做信息持久化存储操作以及停止消耗CPU资源操作,如记录视频播放进度时间,以及暂停视频播放操作等。

onResume or onStop()

onStop()

当另一个活动被恢复且完全覆盖该活动,而该Activity将不在展示给用户时调用。这种情况将发生在一个新的活动将被开始,一个退出的活动将被恢复,又或者该活动将要被销毁。如果该活动将恢复与用户交互则调用onRestart(),如果该活动将被销毁则调用onDestory()。

界面将会隐藏或销毁,做一些重要信息或未被存储的信息的存储操作。但也不要太耗时。如存储用户信息等操作,以及用户此次观看的视频地址以及时间,便于下次打开该界面时继续播放。

onRestart() or onResume()

onDestory()

Activity被销毁钱最后一个被调用的方法。这个方法将会发生因为活动将会结束(在活动中调用finish()方法,或者系统临时销毁该实例节约空间。你可以使用isFinishing()方法区别这两种场景)。

界面将要销毁,释放一些实例节约空间,如置空List集合等。

阶段状态

Activity4种主要状态.png

一个Activity从本质上讲拥有4种状态:

运行:如果当前的activity在前台界面上时(堆栈顶端)。

暂停:如果activity被另一个非全屏活动强占焦点并覆盖时(如弹窗dialog),它将会暂停。一个暂停的活动也是完全活跃的(它的所有的状态和成员信息将会保留,但activity本身将不会再依附于WindowsManager了),在内存极度缺乏的状态会被系统杀死。

停止:如果activity完全被另一个全屏活动遮挡住时,它将会停止。该活动也仍保留全部的状态和成员信息,但将会被隐藏起来不再展示给用户,并且当内存在其他地方被需要时该活动就将会被系统杀死。

重启:如果activity处于暂停或者停止状态,系统将会在内存中终止该活动无论是结束活动或者杀死进程。当它再一次展示给用户时,它必须是完全重启并且恢复到之前的状态。

状态转换

Activity状态转换.png

上图中我们可以看到Activity在生命周期状态进行转换的过程中,activity本身是在什么时候调用的onSaveInstanceState()方法与onRestoreInstanceState()方法来进行重要信息的存储与恢复的。因为在蜂巢版本之前onSaveInstanceState()方法只有在activity异常退出时才会调用,所以我们应该在onPause()方法中进行信息持久化存储的操作,在蜂巢之后的版本,生命周期就可以正常的调用onSaveInstanceState()方法来进行信息持久化存储的操作了。

部分实例列举

上面说了一堆Activity生命周期的定义,在实际应用中,我们更倾向于实践运用,所以我会列举部分实例。Github传送门,大家可以给我点个小星星。

打开activity关闭activity生命周期如下(启动与销毁)

// activity启动

05-24 11:16:44.124 16259-16259/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onCreate

05-24 11:16:44.125 16259-16259/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onStart

05-24 11:16:44.125 16259-16259/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onResume

// activity关闭

05-24 11:16:46.691 16259-16259/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onPause

05-24 11:16:47.038 16259-16259/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onStop

05-24 11:16:47.038 16259-16259/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onDestroy

可以看到正常的启动与关闭Activity不会调用onSaveInstanceState(Bundle)方法与onRestoreInstanceState(Bundle)方法,所以如果要离开该界面时,该界面的重要信息,我们要在onPause()或onStop()方法中进行存储。

弹窗(dialog、popupwindow)

[空]

没错,你没看错。是空!因为dialog与popupwindow实际上是一个存在于这个activity上的控件,所以它并不会影响activity本身的生命周期!试想如果你每次弹窗你的activity都要走onPause方法的话,那你的一些存储持久化操作是不是会不停地无更新的存储呢?所以,不要被一些说法误导,如果你不知道,那么就去动手实践。

打开Dialog样式的Activity(暂停状态)

// 在Manifest文件中首先设置dialog样式

android:theme="@style/Theme.AppCompat.Dialog">

// 然后你懂得,我们来打开这个dialog样式的Activity

05-24 16:27:24.964 26913-26913/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onPause

05-24 16:27:25.206 26913-26913/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onSaveInstanceState

// 最后我们关闭这个Activity

05-24 16:27:28.227 26913-26913/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onResume

屏幕旋转

05-24 11:24:47.377 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onPause

05-24 11:24:47.378 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onSaveInstanceState

05-24 11:24:47.378 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onStop

05-24 11:24:47.378 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onDestroy

05-24 11:24:47.451 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onCreate

05-24 11:24:47.454 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onStart

05-24 11:24:47.454 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onRestoreInstanceState

05-24 11:24:47.454 16724-16724/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onResume

此处的onSaveInstanceState(Bundle)方法与onRestoreInstanceState(Bundle)方法具体执行时机,当targetSdkVersion小于3时onSaveInstanceState是在onPause方法中调用的,而大于3时是在onStop方法中调用的。而onRestoreInstanceState是在onStart之后、onResume之前调用的。

按Home键后再开启app(停止状态)

// 点击home键(菜单键)

05-24 11:50:25.097 17817-17817/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onPause

05-24 11:50:25.407 17817-17817/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onSaveInstanceState

05-24 11:50:25.407 17817-17817/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onStop

// 打开App

05-24 11:51:05.471 17817-17817/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onRestart

05-24 11:51:05.476 17817-17817/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onStart

05-24 11:51:05.476 17817-17817/com.perry.activitylifecycle E/TAG lifecycle: ------>>> onResume

小结

文章中我们具体的了解了Activity的7大生命周期与4种本质状态,还有onSaveInstanceState(Bundle)方法与onRestoreInstanceState(Bundle)具体执行时机。便于我们更好的了解与利用Activity中的每一种生命周期方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。