基于最近阅读《Android开发艺术探索》一书,特借此书写形式来梳理学到的知识点和自我表达能力的提升。 Activity 是一个 android 应用程序组件,也是 android 四大组件之一。主要是用户和应用程序之间进行交互的一个接口,在一个 Android 应用程序中,一个 activity 通常就是一个屏幕,用户通过这个屏幕用来与应用程序交互来完成某项任务。 下面将 Activity 的生命周期分为两部分,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。 一般来说,在正常情况下,Activity 会经历以下 7 个生命周期。 通过对生命周期中各个方法的含义以及作用的了解,我们再来看看下面的流程图是不是就更清晰一点了呢。 从这个图我们可以看出,从整个生命周期来说,onCreate 和 onDestory 是配对的,分别标识着 Activity 的创建和销毁,并且只可能调用一次;从 Activity 是否可见来说,onStart 和 onStop 是配对的,随着用户的操作或者屏幕的熄灭和点亮,这两个方法可能会被多次调用;从 Activity 是否在前台来说,onResume 和 onPause 是配对的,随着用户操作或者屏幕的熄灭和点亮,这两个方法也可能会被多次调用。 延伸一个问题:假设当前 Activity 为 A,如果这时用户打开一个新的 Activity B,那么 B 的 onResume 和 A 的 onPause 哪个先调用呢? 根据手机使用过程中的常见情形,我们从以下两种情形来分析 Activity 异常情况下的生命周期过程: 这种情形最常见的就是手机屏幕发生旋转,由于系统配置发生改变,在默认没有进行配置的情况下,Activity 会被杀死销毁并重新创建。生命周期过程是酱紫的:onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume。 与正常的销毁创建相比:多了数据的保存和恢复两个过程。当 Activity 在异常情况下终止时,系统会调用 onSaveInstanceState 方法将 Activity 的状态保存为一个 Bundle 对象,在 Activity 重建创建之后传递给 onRestoreInstanceState 方法和 onCreate 方法,onSaveInstanceState 方法的调用时机在 onStop 之前,与 onPause 没有既定的时序关系。当 Activity 重新创建之后,系统会调用 onRestoreInstanceState,将之前保存在 onSaveInstanceState 中的 Bundle 对象作为参数取出,进行数据恢复。onRestoreInstanceState 方法调用在 onStart 之后。由此我们可以通过判断是否调用过 onRestoreInstanceState 方法或者 onCreate 方法中的 Bundle 对象是否为 null,来判断 Activity 是否被重新创建。 这里有两个注意点: 1.orientation:屏幕方向发生改变,比如手机屏幕旋转; 当我们指定了configChanges属性时,如果指定的系统配置发生改变,不会重建Activity,但是会调用Activity的 onConfigurationChanged 方法,我们可以根据自己的需求重写这个函数。 一般情况下,Activity 的优先级如下: 一个进程中,如果没有四大组件在运行,那么这个进程很快就会被杀死。所以一些后台工作最后放在 Service 中进行操作,以提高进程优先级,不至于被轻易杀死。
Activity 简介
Activity 的生命周期
一、典型情况下的生命周期分析
针对上方 图1-1 Activity 生命周期的切换过程图,说明几种生命周期切换情况:
解答:A 的 onPause 先执行,再执行 B 的 onResume。所以不建议在 onPause 方法中做耗时操作,从而使得新的 Activity 尽快显示出来。此问题可参考原书中对源码的解析来彻底解决此疑问,在这里就不做源码解析了,大家可以自行参考原著作。二、异常情况下的生命周期分析
1. 资源相关的系统配置发生改变导致 Activity 被杀死并重新创建。
2.locale:设备的本地位置发生了改变,一般指切换了系统语言;
3.keyboardHidden:键盘的可访问性发生了改变,例如用户调出了键盘。<activity android:name=".MainActivity" android:configChanges="orientation|locale|keyboardHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
2. 资源内存不足导致优先级较低的 Activity 被杀死。
本篇文章是针对 Activity 的生命周期从正常情况和异常情况两种情形下对此进行了一个过程解析,可见作为 android 四个组件之一 ,Activity 有着非常重要的作用。主要是参考和借鉴了《Android开发艺术探索》一书,如有不恰当、不充分的地方,欢迎大家指正。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算