自学Android之Activity:(二)Activity生命周期

转载请注明出处:http://blog.csdn.net/cc_xz/article/details/54587771

前言:

基本上每个人在刚开始学习Android的时候,除了Java的方面的知识外,第一个接触的就是Activity了。本篇就通过生命周期,来初步的认识Activity,在讲解生命周期的同时,也将贯穿着Activity的一些其他知识点。废话不多说,来,死狗!

在本篇中,你将了解到:
 1. 什么是生命周期。
 2. 生命周期在Android中扮演什么样的角色。
 3. 都有哪些生命周期,分别是做什么的。
 4.通过Log观察不同时期的不同周期。
 5.了解常用的生命周期。
这里写图片描述

神马是生命周期?

说到生命周期,就像人从诞生,一直到生老病死,会经过不同的阶段,而在不同的阶段(时期)会做不一样的事情。比如说你在青年时期的任务就是认真学习。而到了中年时期就需要抚养子女,挣钱养家。
同样,这个叫Activity的东西也有生命周期,在它的一生也需要在不同的阶段完成不同的工作。也就是你的程序也有生命周期,在正确的时期去完成你期望它实现的工作,很容易理解,如果它在错误的阶段做错误的事情,得到的必然是“程序停止运行”!当然,这几个字你以后会经常看到。

这里写图片描述

生命周期即:你的程序在不同的阶段需要你的程序可以做的事情。

再具体点?

通过上面我说的,你想想在你编写程序的时候程序是会经历不同的“生命周期”的,那么具体来讲,就是你将要把代码写在Activity中,在它的“生命周期”里去实现你想要的功能。
举个栗子,当你的程序刚刚建立的时候,如果你不把你希望显示的东西初始化“Java知识点”的话,手机上显示的可能是一片空白,对吧?这样显然是不行的,所以你需要把关于初始化的代码写到程序建立的时候就会执行的方法中。并且,当你的程序被用户关闭的时候,你至少也得在被关闭之前去保存一些用户信息吧?万一用户正在写博客,手机却没点关机了呢。
这里写图片描述
咦?你刚刚看到了什么?方法?没错,其实我刚刚说的玄乎,什么“生命周期”,其实说白了,就是你程序创建的时候,Android系统要求你必须执行某几个方法,在程序关闭的时候,Android系统又会要求必须执行某几个方法。当然,你写或不写,方法总在哪里。你重写不重写,方法总会被执行。

具体来说,生命周期就是Android系统在程序创建、关闭的时候强制执行的一些方法。

为神马要学习生命周期啊?

没错,这是一个很好的问题,也就是说,学习生命周期会跟你的撸码生涯起到什么作用呢?
还记得Activity是做什么的么?没错,你的程序如果希望被用户看到并且进行操作(交互?),必须使用Activity来进行,即使是Fragment也是依附于Activity的。也就是说你的组件、数据、界面肯定不会竹筒倒豆子一般一次性全部展示给用户的,而是需要用户进行一些操作以后才会出现。
这里写图片描述
再举个栗子:现在很多应用都可以使用QQ、微信进行登录的,你回忆一下,当你选择登录方式的时候,界面是不是变了?按照我们现在的理解,选择登录和具体登录不是在同一个Activity中进行的!登录完成以后看到的也不再是登录界面的了。
这个过程在程序内部,就是登录界面在它关闭之前把已经登录成功的消息告诉了登录以后你将看到的Activity了。你总不会希望用户点击登录以后,还没有使用具体账号,就直接登录成功了吧?这就是生命周期的好处!

通过生命周期,你可以更好的控制程序的执行逻辑,达到与用户更好的交互。

别急,我还得唠叨两句!

在来看生命周期之前,我们先来聊聊一个Activity会有几种状态。打开你手机上的应用看看,是不是它有时候会被你打开(创建),然后当你手残返回了桌面,是不是程序就被挂起了?(暂停)好吧,手残以后你又打开了游戏,玩了一会接到基友的电话(暂停),游戏总是比较占内存的,又过了很久,这个应用终于被系统回收了内存(停止)。然后呢?然后要用的时候再打开呗~

Activity有3个状态,分别是创建、暂停、停止。生命周期即是对应这3种状态。

终于到正题了,都有哪些生命周期?

先来看看官网给出的Activity生命周期流程图:
这里写图片描述
可以看到,从用户点击应用的图标,再到应用显示到屏幕上,Activity一共需要经历3个生命周期,当用户切出应用或者该Activity被其他Activity覆盖掉了以后,会经历一个暂停的周期,当被暂停后,可能通过onResume()这个周期(其实我更喜欢把它称为方法)再重新回到桌面上,让用户看到它。但也可能直接被关闭了,这时候就会调用onStop()这个方法。值得注意的是,此时程序虽然被关闭了,但还是占用一部分内存的。
别拍砖,现在你可能不知道,在Android中会有一些方法是用于保存数据的,比如你可以通过一个叫Bundle的类来保存现在这个Activity的状态,事实上每个Activity都会默认使用到Bundle,这个我们学习传值的时候再说。
我想表达的是,虽然程序被关闭了,但是Bundle的数据还存在于内存中的,所以此时还没有完全消失,这个时候如果程序被打开,就会调用onRestart()这个方法,然后再重新回到onStart()中,直至经过onResume()再次显示到屏幕上。
我想你肯定知道了,只有最终这个程序所占用的所有内存都被系统收回以后,这个程序才算真正的“死透”了,当然你可以随时复活它。咳咳跑题了,最后当程序死透前,就会调用onDestory()这个方法。这下知道为什么有些程序总也杀不死了吧?

在Activity3种状态的基础上,会有不同的方法被系统调用,而你要做的就是在程序进行某个状态前告诉程序他将做什么。

我发现你废话一箩筐,给我仔细说说!!!

你可能会发现在程序展现到屏幕之前,有3个方法,分别是onCreate()、onStart()、onResume()这三个方法,如果你觉得这3种方法只需要一种就可以了,这个时候你需要仔细的去看一下上面的生命周期执行过程的图片了。针对从不同的状态启动,是需要调用不同的方法的。
这里写图片描述
举个栗子:一般初始化组件是在onCreate()这个方法中进行的,而你如果从关闭状态再回到桌面上,再初始化一次组件的没有必要的,对吧?这个时候系统就自动越过它了。
虽然说这些生命周期很多,但是默认只有onCreate()是必须创建的,而你如果执意在onStart()中初始化组件,我和编译器也没有什么意见,对吧?

针对不同的生命周期会调用不同的方法,但并不会有某些代码必须写在某个方法中,灵活运用完成需求。

Android活动生命周期总结:

1.onCreate(创造)
创造代码,完成初始化。
2.onStart(开始)
启动活动,加载资源。
3.onResume(继续)
将活动推向前台,同用户交互。
4.onPause(暂停)
从当前活动转向另外活动。
5.onStop(停止)
停止当前活动。
6.onDestroy(销毁)
释放内存,销毁活动。
7.onRestart(重启)
启动被停止的活动,即重启活动。

现在来看看代码:

值得注意的是,Android Studio的提示功能很强大,你可以直接通过输入部分方法名称(周期名称)就可以直接生成一个方法中除了Log那行代码外的所有代码。首先来看看代码:

public class MainActivity extends AppCompatActivity {
    String TAG = "这是MainActivity发出的消息:";

    @Override//创造代码,完成初始化。
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e(TAG,"启动了onCreate()");
    }
    @Override//开始:启动活动,加载资源。
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "启动了onStart()");
    }

    @Override//继续:将活动推向前台,同用户交互。
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "启动了onResume()");
    }

    @Override//暂停:从当前活动转向另外活动。
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "启动了onPause()");
    }

    @Override//停止:停止当前活动。
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "启动了onStop()");
    }

    @Override//销毁:释放内存,销毁活动。
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "启动了onDestroy()");
    }

    @Override//重启:启动被停止的活动,即重启活动。
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "启动了onRestart()");
    }
}

各个方法对应的生命周期及其作用已经标注的很清楚了,这时你可以通过运行模拟器来查看查看在不同的生命周期中打印出的不同Log。

常用的生命周期:

其实最经常用的生命周期就是onCreate(),甚至在你学习Android的过程中,会很少使用到其他的生命周期,但是这并不代表其他的生命周期不重要,因为你要知道的是,在你学习的过程中只是学习各个小的功能,但是等到做出一个真正的APP的时候,你需要考虑的就是这个程序完整的生命周期,例如你不希望你的程序在用户退出界面后就被Android收回了(可能需要后台运行,例如闹钟等等),那么这个时候你是不是就可以在onDestroy()中写几行代码?
再例如说,当你使用地图APP导航的时候,这个时候你的手机可能是锁屏状态,那么是不是需要onPause()中写几行代码?
其实我想表达的是,不同的生命周期有不同场景中的应用,也许很多你现在使用不到,但是待到你需要的时候,一定需要记起来,哦…这个方法是这样的。

结尾:

在下一篇文章中,我们将通过代码加Log的形式去更具体的查看关于Activity的生命周期,等你通过代码观察过生命周期,详细你再回过头来看这篇文章,会有更多的领悟。当然,等到你撸了很多很多代码,很多不明白的东西其实早已经不知道什么时候已经了然于胸了!

我发现不知不觉一个小时就过去了。没错!啰嗦这些花了我一个小时,我现在需要考虑后边的博客要不要写的这么啰嗦了!万一你们嫌弃我怎么办?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值