Android起航系列第四章:activity生命周期管理

Android手机APP起航系列

本博客文章基于android官方sdk的docs文档,目的是通过此教程巩固android手机app开发的一些应知应会的基础知识,也希望能帮助同在学习android开发的小伙伴们,共同进步,如有写的不到之处,还请各位小伙伴们不吝赐教。


activity是android app的四大组件之一,也是最基础、最重要的内容,小伙伴们一定要完全掌握相关知识。activity是app与用户交互的桥梁,直译为活动窗口的意思,我们可以简单理解为程序UI界面。用户在app使用中来回切换导航,有时也会暂时切出app,再切回我们的app,这些的动作都伴随着activity的状态变化,app是通过activity的生命周期回调方法来管理我们的activity。比如,我们在点击图标启动我们的app时,app会调用主activity的onCreate()方法,我们在该方法中自定义行为。

主要内容

1、生命周期图(经典)
2、定义app的启动activity
3、生命周期回调方法


一、生命周期图(经典)

这里写图片描述


二、定义app的启动activity

一般情况下,当我们创建一个项目时,工程会自动给我们创建一个MainActivity,该activity是程序主入口,androidmanifest.xml文件会自动给该activity添加,来标明该activity是程序的启动activity、也是用户的主入口。如果您的app项目中没有一个activity添加了MAIN 或者 LAUNCHER标签,会导致您的app在桌面清单中找不到。
androidmanifest.xml文件内容如下:

<activity android:name=".MainActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

三、生命周期回调方法

在锥形金字塔形的生命周期图中,activity的状态一共有6中状态,分别是created–>started–>resumed–>paused–>stopped–>destroyed。六中状态对应六种回调方法,其中onCreate()、onDestroy()方法在activity的整个生命周期过程中有且仅执行一次,

onCreate()方法
当activity被运行后,其状态向着金字塔的顶端移动,系统调用其onCreate()方法,成功后其处于created状态时,此时activity还没准备好与用户见面,用户不可见,但activity实例已经创建在内存之中,该状态维持时间只是一瞬间,它的作用是为下一步调用onStart()方法做准备;


onStart()方法
created状态之后,系统会调用onStart()方法,成功后其处于started状态时,该状态是用户是可见的,但还没有准备好与用户交互,该状态维持时间也只是一瞬间,它的作用是为下一步调用onResume()方法做准备;


onResume()方法
当状态处于resumed时,activity是既可见又可交互的,通常可以理解为active/running状态。当activity从paused状态resume回来时,系统调用onResume()方法。我们需要记住,每次当activity进入屏幕时(包括第一次创建时),我们需要初始化那些在onPause()方法中释放资源的组件,以及进入resumed状态需要初始化的组件与变量。

@Override
public void onResume() {
    super.onResume();  
    if (mCamera == null) {
        initializeCamera(); 
    }
}

onPause()方法
当activity被不完全遮盖时,其失去了焦点但仍部分可见(可见但不可交互),进入paused状态。这种状态经常是用户将要离开app的信号,我们经常将以下3种事情放在onPause()方法中去做:
(1)停止动画和其他正在执行频繁消耗cpu资源的是行为
(2)提交一些未保存的更改且用户确定要保存的数据,如阅读进度、邮件草稿等,以免用户离开后数据未保存
(3)释放系统资源,比如广播接受器,传感,GPS,或者其他可能影响电池寿命的不再需要资源
同时,paused状态时用户是可见的,而让用户等待是不太友好的用户体验,所以我们应该避免在onPause()方法中执行比较消耗CPU资源的事情,比如向数据库写入数据的操作,这会影响其向下一状态转换的效率,(我们应该把这些重量级的数据库关闭操作放在onStop()方法中执行,因为它不可见)

@Override
public void onPause() {
    super.onPause();   
    // 释放相机资源,因为暂停状态我们不再需要,并且可能其他组件需要用
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

onStop()方法
stopped状态是指当activity被完全遮盖处于隐藏时,用户看不见摸不着。这有两种情况,第一种情况是:用户切换使用其他的app时,原app处于后台运行状态,处于隐藏状态(但activity的实例还在,当用户返回原app时,不需要再次创建,只需要调用onRestart()与onstart()方法,其会再次回到resumed状态);另一种情况是,用户并没有切出app,一直在处于app中,只是从当前activity切换到另一个activity,原activity处于stopped状态,这时如果系统资源比较紧张,需要回收垃圾内存,原activity会被回收,即执行onDestroy()方法,生命周期结束。


onDestroy()
如果系统资源充足,不需要回收资源,app的所有activity都以栈的方式储存,先打开的activity被压在栈的最下面,以一种先进后出的方式存储(如下图)。

这里写图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值