第一次接触安卓开发,感觉很有必要把生命周期弄明白,不然感觉云里雾里很难受,总之很难受!!!于是把老师的ppt结合各种网上搜来的瞄了一遍,
记录一下自己小小的理解和大大的感受。
1.程序生命周期
程序生命周期是什么?程序生命周期么就是在android系统中进程从创建到终止的所有阶段。
Android会根据组件的重要程度将系统中的每个进程分别分为5大类:
- 前台进程:可见并可以与用户交互(优先级最高)。
- 可见进程:可见但不可交互。
- 服务进程:有启动服务的进程,无用户界面,长期后台运行如后台音乐播放。
- 后台进程:不包含任何启动的服务,无用户可见的进程,如用户按home键,程序就成为后台进程。ps:系统会随时终止后台进程,为前三种进程提供足够的内存。
- 空进程:不包含任何活跃组件的进程,存在的目的是提供一种缓存机制,为了下次打开这个软件的时候可以更加方便快速,一旦手机要更多内存,最先被处理。如用户按退出键,程序变为空进程(优先级最低)。
ps:所以可见,要退出软件时,最好用退出键,让其变为空进程,也没必要主动去清理,系统自己会清理,主动去清理反而违背了系统设计的意志。
2.四大组件
在说Activity的生命周期前,得了解什么是Activity。记得上课时,老师讲到Activity,旁边一哥们问我啥是Activity,我很虚的回答,活动啊,
活动是神马,我也不知道,但当时觉得很对。其实Activity是一个组件。组件是可以调用的基本功能模块,Android应用程序就是由组件组成的。
Android系统有四个重要的组件,分别是Activity、Service、BroadcaseReceiver和ContentProvider
Activity:程序显示的界面,也是交互的界面,一个程序当然可以有多个界面。表现形式:全屏窗体,非全屏悬浮窗体,对话框。
Service:这个组件用于没有用户界面,长时间在后台运行的应用。
BoardcaseReceiver:用来接受并响应广播消息的组件。可以通过启动Activity或者Notification通知用户接收到重要信息。Notification能够通过多种方法提示用户,包括闪动背景灯、震动设备、发出声音或在状态栏上放置一个持久的图标。
- ContentProvider:Android系统提供的一种标准的共享数据的机制,应用程序可以通过ContentProvider组件访问其他应用程序的私有数据。
3.Activity生命周期
这才是本文重头戏,Activity生命周期!!!当然,所有组件都有其生命周期,我主要讨论Activity生命周期,为什么?哪有那么多为什么?!
我把Activity生命周期分为4状态9函数3周期。
Activty从启动到销毁表现为四个状态:活动、暂停、停止、非活动,遵循先进先出的栈:
- 活动状态:Activity在用户界面中最上层,用户可见并可交互。ps:什么进程?
- 暂停状态:Activity被部分遮挡,不在最上层,用户可见但不可以交互。ps:什么进程?
- 停止状态:Activity完全不能被用户看见,被其他Activity遮挡。ps:什么进程。
- 非活动状态:不在以上三种状态的Activity。很模糊,不管它!
Activity生命周期有9个事件回调函数:
- onCreate(): Activity启动后第一个被创建的函数,常被用来初始化。
- onStart(): Activity被显示在屏幕上时被调用,用来初始化或启动与更新界面相关的资源。
- onRestoreInstanceState(): 恢复onSaveInstanceState()保存的Activity状态信息,在onStart()和onResume ()之间被调用。
- onResume(): 当Activity能和用户交互时被调用,此时Activity在栈的顶层。
- onPause(): 当Activity进入暂停状态时被调用,用来保存持久的数据和释放占用的资源。
- onStop(): 当Activity进入停止状态时被调用,一般用来暂停或停止一切与更新用户界面相关的线程、计时器和服务。
- onRestart(): 当Activity从停止状态进入活动状态,调用此函数,
- onDestory(): 当Activity进入非活动状态,及被销毁时被调用。
- onSaveInstanceState(): 当Android系统因资源不足终止Activity前调用该函数,用以保存Activity的状态信息,供onRestoreInstanceState()或onCreate()恢复之用。
如果仔细研究了上图的,想必一定发现了我说的那三个生命周期:
- 全生命周期: 从onCreate()初始化到onDestroy()释放,激进点的会不调用onDestroy()直接kill掉进程。
- 可视生命周期: 从onStart()显示界面到onStop()界面不可见。
- 活动生命周期: 这个周期开始于onResume(),结束于onPause(),Activity在栈的最上层,能与用户交互。因为在Activity的状态变换过程中onResume()和onPause()经常被调用,因此这两个函数中应使用更为简单、高效的代码。
小结:ok,对生命周期的认识就到此结束了。本来想举个例子,通过LogCat的输出来查看生命周期的具体运行,但,夜深了,该睡了,睡了,了。Zzzzzzz