你的位置:首页 > 软件开发 > 操作系统 > 探究Activity的各回调方法

探究Activity的各回调方法

发布时间:2015-11-21 01:00:31
刚毕业那会儿,一心想朝着java web的方向进军,却岂料实习的时候阴差阳错地踏入了Android的大门,自此人生跌宕起伏、坎坎坷坷,在一家外企参与了几个需要越过GFW才能使用的有关于体育赛事的项目,之后跳了个槽跟另外一个哥们做了好几个没见到阳光的充斥着浓浓果味儿的App。无数的 ...

探究Activity的各回调方法

刚毕业那会儿,一心想朝着java web的方向进军,却岂料实习的时候阴差阳错地踏入了Android的大门,自此人生跌宕起伏、坎坎坷坷,在一家外企参与了几个需要越过GFW才能使用的有关于体育赛事的项目,之后跳了个槽跟另外一个哥们做了好几个没见到阳光的充斥着浓浓果味儿的App。无数的努力付之东流会让一个人厌倦某一件事情,所以我要开始写写能让自己看懂的文章,借此找点乐子当然也是为了记录记录自己的学习历程。

探究activity的各回调方法之前,首先插入一张官方的生命周期图,然后用适合自己的语言记录下简化的生命周期中各回调方法的涵义。

探究Activity的各回调方法

 

onCreate()

一般人认为的activity的入口(然而不是),当activity第一次created之后会回调这个方法。如果把activity比作房子的话,回调这个方法之前activity还只是一个毛坯房,我们要在这个方法里边对它进行装修,这样它随后显示的效果就跟我们所预想的一样了。

onstart() : 

这个时候我们可以看到activity了。

onResume() : 

这个时候我们可以跟activity进行交互了。

onPause() : 

这个时候我们还是能看到activity,但是不能进行交互了。举个栗子,假设我们当前的activity为A,有一个启动activity B的意图,这个时候A会回调onPause(),当A的onPause()回调完成之后,B开始onCreate()->onStart()->onResume()...完了之后B就处于可见可交互的状态了。那么A呢?如果此时A看不见了,A就会回调onStop()方法;另一种情况是此时A还是部分可见的(比如Activity B的主题是@android:style/Theme.Dialog),A就不会回调onStop();  从上面的分析可以知道,onPause()方法里面不允许做耗时的操作,不然B等了半天都启动不了。

有一点需要注意的是,不是说A处于部分可见但是不可交互的状态就一定会回调onPause()的,不信你show一个Dialog,show一个DialogFragment,或者show一个设置焦点为true的PopupWindow试试看。

onStop():

这个时候activity已经一丁点儿都看不到了。

onDestroy():

activity的临终遗言就在这里面写了,因为回调完它就被摧毁了。activity被摧毁有两种情况,一是someone调用了finish()方法,二是系统要节省内存空间而临时干掉它. 如何区分呢?官方文档里面说的是通过isFinishing()这个方法来判断。 如果是someone调用了finish()方法,isFinishing()毫无疑问是return true的。如果是系统为了节省空间,isFinishing()=false?

onRestart():

activity准备重新出来见人了。典型的栗子是启动一个能完全遮挡住前一个activity的新的activity之后,再按back键返回到前一个actvity,这样前一个activity就会onRestart()->onStart()->onResume();另一个栗子是按下电源键,熄灭屏幕,再打开,点亮屏幕的时候;还有一个是按下home键,再从最近任务栏或者点击应用图标重新进去的时候....

 


 

到此为止,简化的activity生命周期就大致掌握了,但是将近七千行的activity源码可不止这几个回调方法。当然,我们不必要去追究里面每个方法每个变量的意义与作用,我觉得那样是一种浪费时间的表现,还不如去多看几个用得上的api或者研究下目前一些流行的开源框架怎么使用(好吧,实际上是老子看不懂那一堆fucking source code~~),话虽如此,一些有用或者有意思的回调方法我们还是需要了解了解的,要不然怎么提升自己的编程逼格呢!!!!!!!!!!

onApplyThemeResource():

一般来说在AndroidManifest.

这个方法顾名思义就是activity应用主题资源的,当然并不是说activity直接就调用onApplyThemeResource()了,我们可以稍微追踪下它的调用路线。

探究Activity的各回调方法

我们知道要启动一个activity,会调用ActivityThread的performLaunchActivity()方法来创建这个activity,下面我们点进去找到关于设置主题的几行代码。

private Activity performLaunchActivity(......) { ......   if (activity != null) {     Context appContext = createBaseContextForActivity(r, activity);     ......     activity.attach(appContext, this,......);     ......     int theme = r.activityInfo.getThemeResource();     //如果在AndroidManifest.

原标题:探究Activity的各回调方法

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录