Activity篇(一)
好久以前就有写博客的冲动,只是迟迟未动笔,一个原因是没有足够的闲情逸致来写这个东西,还有一个原因就是自己对android的理解还不够深刻,自认为即使写,也没有多大的意义,当然现在也还是不够深刻。不过心态变了,我想通过以写博客的形式将我对android的理解和日常工作中学习到的东西记录下来,这里我将分模块式的进行,首先便是最熟悉不过的Activity。
- Activity的生命周期简介
- Activity在跳转过程中的变换
- Activity的四种启动模式
一、Activity之生命周期简介
我们都知道activity的生命周期是:onCreate()->onStart()->onResum()->onPause()->onStop()->onDestory();其中每一个生命周期方法对应的时刻分别为:
onCreate(): 当Activity正在被创建的时候会调用该方法,一般在该方法中会做一些初始化的工作,比如说去加载该Activity对应的ui,注意如果在该方法中直接调用了finish()方法则会立刻调用该Activity的onDestory()方法,而不会再去调用剩下的其他生命周期方法例如:onStart(),onResum(),onPause()。
onStart(): 在onCreate()方法之后调用,或者是在onRestart()方法之后调用(当该Activity已经调用了onStop()方法,并再次被显示给用户的时候)。
onResume(): 在onStart()方法之后调用,该方法调用后Activity就可以和用户开始进行交互操作了,特别注意onResume()方法并不是一个最好的指示器对于判断该Activity已经可见。Activity已经可见的最好的判别方法是onWindowFocusChanged()通过该方法能够确信Activity一定是对用户可见的。
onPause(): 当一个Activity即将进入后台但是又没被杀掉的时候会调用该生命周期方法,比如说Activity由A跳转到B的时候,A将会执行onPause()方法,注意在改方法内不可执行任何耗时操作,可在该方法内做一些持久化的状态保存操作,或者是停止动画等以减少cpu占用,从而使得B加载的更快。
onStop(): 当Activity对用户完全不可见的时候会调用该方法。
onDestory(): 当Activity被销毁的时候调用,在该方法中一般做一些清理工作,释放资源,停止与当前Activity相关的thread或者Runnable等。
二、Activity在跳转过程中的变换
然而单纯的为了讲生命周期而讲生命周期就毫无意义了。就好比人这一生,一句话就能概括:生老病死。但我们往往更关注的是生命中发生的故事和这些故事对整个人生所带来的影响,废话不多说进入正题。
首先定义两个Activity一个叫AActivity另一个叫做BActivity下面简称A,B,A作为MainActivity被启动后,A再通过Intent以最简单的方式调用startActivity启动B这时A,B的生命周期如下:
倘若此时我按返回键 A,B的生命周期为:
通过看Log可以看出来Google当时在设计Android的生命周期上可谓深思熟虑,基本上生命周期都是成对的。同时按道理来说当我按返回键时,B应该先走完onPause()->onStop()->onDestory()再去执行A的onRestart()->onStart()->onResume()这样貌似才对啊!实则不然,当我按返回键的时候其实已经不想管B如何了,只是想回到A让A尽快显示出来,所以才有了以上Log中的生命周期执行顺序(个人理解哈哈)。至于其他更为复杂的Activty之间的切换将在以后的文章中会讲到。
三、Activity的四种启动模式
我们知道Activity有四种启动模式分别是:standard,singleTop,singleTask,singleInstance。他们可在Manifest文件中对应的Activity属性中进行配置,例如:
<activity
android:name=".AActivity"
android:launchMode="singleTask"
/>
不同的启动模式代表的启动方式有所不同。
standard: 标准启动模式,也是默认的启动模式,通过该模式启动的Activity,启动一个就创建一个新的Activity生命周期从onCreate()开始。
singleTop: 单顶部模式,顾名思义就是相同的顶部只保持一个,很简单例如:A(启动模式为:singleTop)处在当前Activity栈的栈顶(即处在和用户交互中),同时又在A中通过startActivity再启动A即:A->A,这时候便不再创建新的Activity而是继续使用当前的Activity。再次启动A时的生命周期为:onPause()->onNewIntent()->onResume()。
singleTask: 单任务模式, 在一个Task中只允许有一个,至于什么是Task请关注后续文章更新,或者自行百度。例如:A(启动模式为:singleTask)启动B,B再启动A即: A->B->A,这时候不会再创建A,而是清除掉Activity栈中,所有在A之上的Activity,由B到A,此时A,B的生命周期为:
singleInstance: 单例模式,这个模式稍微有点复杂,要想解释清楚还得不少文字,在这里就不做解释了,可以去这里查看android启动模式
通过intent的flag在代码中动态设置启动模式在这里就不做过多介绍了,后续文章中会讲到。
今天先写到这里吧,去做饭去了,不然女票要哭了~。后续继续更新Activity篇(二)