Android基础知识回顾之Activity

来源:互联网 发布:学编程有什么好书 编辑:程序博客网 时间:2024/05/18 03:48

Activity是安卓的四大组件之一,所以对它的深刻理解在安卓中显得尤为的重要,首先Activity是一个可见的,可交互的组件,这是由于它实现了Window.Callback和KeyEvent.Callback接口,其中在Window.Callback中实现了dispatchTouchEvent()方法,所以Activity可以实现屏幕的触摸事件,在KeyEvent.callback中实现了onKeydown()方法,可以实现手机物理按键的操作.

说完了Activity的可见可交互的特点,那就不得不说一下Activity的生命周期,这也是面试中经常问到的一些问题,首先Activity的生命周期可以分为:onCreat(0,onStart(),onResume(),onPause(),onStop(),onDestory(),和onRestart()7个过程,其中前六个过程是一一对应的,而onRestart()方法只有当Activity由不可见状态变为可见状态是会调用,下面说一下每个方法的应用:

(1)onCreat():Activity正在被创建的方法,这是生命周期的第一个方法,在这个过程中我们一般会做一些初始化的动作,比如说加载布局,初始化一些数据

(2)onStart():表示Activity正在被启动,这时的Activity界面已经可以可见了,但是还是无法和用户进行交互,可以理解为此时Activity已经显示了,但是我们看不见.

(3)onResume():标识Activity已经可见了,并且开始运行在前台进行活动,这个可onStart()的区别是,两者的Activity都可见,但是onStart()方法里的Activity是运行在后台的,而onResume()方法中的Activity是运行在前台的.

(4)onPause():表示Activity正在停止,此时可以进行一些数据存储,停止动画等操作,但不能太耗时,因为会影响到下一个Activity的展示,因为下一个Activity的显示,只有当前的Activity执行完onPause方法,才会执行新的Activity的onResume方法.

(5)onStop():表示Activity即将被停止,可以稍微做一些重量级回收工作,但是同样不能太耗时.

(6)onDestory():表示Activity即将被销毁,这是Activity生命周期的终点,可以做一些回收工作和最终的资源释放.

(7)onRestart():表示Activity重新被启动.


Activity的生命周期大概如此,其中在Activity启动过程中调用的次序如下:

(1)第一次启动,回调:onCreat()->onStart()->onResume()

(2)当用户打开新的Activity或者回到桌面,回调如下:onPause->onStop.但是如果新的Activity采用的透明的主题,那么当前Activity不会调用onStop方法

(3)当用户再次回到原Activity的时候,回调如下:onRestart->onStart->onResume

(4)当用户按返回键回退时,会调用:onPause->onStop->onDestory


除了一些正常的生命周期,Activity在异常状况下的生命周期如下:

(1)资源相关系统配置发生改变:当Activity异常终止的时候会调用onSaveInstanceState方法,来保存当前Activity的状态,此方法在onStop之前调用,也仅仅当Activity异常终止的时候才会调用.在Activity异常终止的时候,会调用onSaveInstanceState保存为一个bundle对象,当Activity再次被创建的时候通过onRestoreInstanceState和onCreate方法判断Activity是否被重建了,如果被重建了,可以取出数据并恢复,onRestoreInstanceState方法的调用在onStart方法之后

(2)资源不足,后台进程被杀死.Activity的优先级从高到低可分为三种:

①前台进程:正在与用户进行交互的Activity,优先级最高

②可见但非前台进程:比如说Activity中弹出一个对话框,导致Activity无法和用户进行交互

③后台进程:已被暂停的Activity,执行了onStop,优先级最低

以上三种就是Activity的优先级,在内存资源不足的时候后台进程会被销毁,但是和第一条一样一会保存Activity的数据和状态.

一般常见的处理异常生命周期场景就是在手机横竖屏切换时的生命周期,如果不做任何处理,系统会先销毁当前Activity然后在创建一个新的Activity,所以我们应该在创建该Activity的时候设置其属性:

android:configChanges="orientation|keyboardHidden|screenSize"

或者直接写死屏幕方向:android:screenOrientation="landscape"


0 0
原创粉丝点击