对于Android程序员来说,掌握活动的生命周期非常重要,当我们深入了解活动的生命周期以后,才能写出更流畅的APP,让我们更好的去分配资源,让应用程序有更好的用户体验。
Mobile apps不是真正在较小屏幕上运行的desktop apps。我们不像使用desktop apps那样使用mobile apps。当我们使用desktop app时,它通常因为我们专注于手头的任务会保持打开和活动很长一段时间。相反,Mobile apps的使用寿命更短。我们通常把它从口袋里拿出来,做一些快速的任务,然后把它放回去。有时甚至,当我们使用特定app时,我们可能会被另一个app(例如,电话)打断,导致最初app将被中断,被现有另一个app代替。这些apps的所有激活和运行都由Android runtime管理。
作为开发人员,您无法控制app的生命周期;这由用户来控制。您不能假设在向您的app输入数据的过程中不被用户打断。您也不能假设您的app将始终安全退出;如果没有机会正常关闭,它可能会被杀死。这些都是在设计代码时需要注意的。幸运的是,只要我们的组件发生了某些事情(比如活动),Android运行时就会通知我们。下图显示了活动生命周期。
一、回调方法
Event | Description |
---|---|
onCreate | Called when the activity is first created; you can put your initialization codes here |
onRestart | When the activity has been stopped and restarted again. This is always followed by onStart |
onStart | When the activity is starting to become visible to the user |
onResume | The activity is ready to interact with the user, at this point; the activity is at the top of the activity stack, and it occupies the whole screen |
onPause | When the activity is about to go to the background; this can happen when another activity grabs the focus |
onStop | When the activity is no longer visible to the user |
onDestroy | Called when the activity is destroyed. For the application to come back, it needs to be created again |
3种生存周期:以上的7个方法中,除了onRestart()方法,其他的都是两两相对应的;
1、完整生命周期
活动在onCreate() 和 onDestroy();
2、可见生存周期
活动在onStart() 和 onStop()
3、前台生存周期
活动在 onResume() 和 onPause()
下图是活动周期示意图
二、返回栈
Android使用任务(Task)来管理活动,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈。那什么是栈呢?栈是一种后进先出的数据结构。我的理解是,栈好比是一个容器,我们要依次往里面放置内容物(数据,Activity),而先放进去的,我们是必须要把最上面的(最后放进去的)先拿走,才能看到或者拿到。
默认的情况下,当我们启动一个新的Activity的时候,这个新启动的活动就会被压入返回栈中,处于栈的顶部,我们只能看到处于栈顶的这个活动,当我们按下Back返回键或者Finish()掉当前栈顶的活动时,它就会退出栈顶,之前被放入的活动(没有被Finish()掉)就会成为栈顶元素,呈现在我们面前。下面我们用一幅图来说明这个问题。
看完栈,我们再看一下活动的状态。活动在其生命周期中最多可能会有四种状态:
运行状态:当活动位于栈顶时,就处于运行状态,系统最不愿意回收这样的活动,回收会导致很差的用户体验。个人认为就是程序闪退,崩溃等。
暂停状态:当活动不再处于栈顶,但是对用户依然可见时。不是说在栈顶的元素才对用户可见吗?这是因为不是每一个活动都是覆盖整个屏幕的,一些对话框形式的活动就只会占用一部分而已,比如Dialog。系统也是不愿意回收处于暂停状态的活动的,除非在万不得已的情况下。
停止状态:活动不再处于栈顶,并且完全不可见的时候,就会处于停止状态。但系统会保存相应的状态和变量,但是当内存不足时,还是会回收这一类的活动的。
销毁状态:当活动从栈中移除以后就变成了销毁状态。系统最乐意回收这类活动,以此来保证充足的内存。
三、实例展示
需求:
实现一个应用中的从主界面分别跳转到其他的2个界面
步骤:
1、建项目<