万丈高楼平底起。做什么事都要打好基础。作为一名三流的 程序员在经过几轮大公司的面试后,深刻的 体会到基础是多麽重要。
Activity
Activity是安卓中四大组件之一,在项目中占据着十分重要的角色
Activity的生命周期如下 图:
大家需要注意的是途中的绿色的部分(也是面试题里经常问到的)
举个例子在标准模式下activityA跳转到activityB的时候,activityA会先执行onPause方法之后就是activity的启动生命周期,当activityB完全展示的时候,activityA会再调用它的onStop方法。大家一定要注意,很多面试题会遇到。
下面我们具体的介绍这几个生命周期中的重要方法。
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
这些只是activity的一些基础方法,启动、可见和不可见的执行操作。所以在开发项目的时候,需要重新获取数据或者保存一些参数设置的时候,在这些方法中都可以尝试操作。
再介绍几种不常用的一下方法:
1.onRestart()方法,当activity从后台或者覆盖状态下回到前台的时候调用此方法。
2.onWindowFocusChanged()方法,可以从字面意思理解这个方法,窗口聚焦状态变化,我们可以理解为在当前窗口的activity是否可操作。那么一个activity从创建到销毁,那么这个方法至少要被调用两次(在onResume(获得焦点后)掉用一次,在onPause(失去焦点后),调用一次)。这个方法在一些做一些动画效果的时候很有用。举个例子。我在给扬州光电做一个内网播放视频的app的时候,用的是SurfaceView和mediaPlayer搭配的播放器,在onCreate中进行画布的创建,时不时出现无法播放,这个问题困了我好久,最后不得不事先访问网络数据,再进行数据的传递。偶然在网上看到这个介绍,拿过去一试,就ok了。原因就是在网络好的时候数据先拿到,而window中的对象还没初始化完成,TM当然播不了了。
3.onSaveInstanceState()方法,(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。
4..onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。
5.onConfigurationChanged:这个方法是当横竖屏互转的时候调用。可能很多人没用到,横竖屏直接在清单文件中写死了,一般都不让它横竖转动。但是当你的项目中有播放器的时候,一般都会用到,全屏与半屏的切换,当你在清单文件中配置让activity不重新走onCreate方法的时候,那么一些数据的设置就需要在这个方法中进行了。因为其他方法是不会走的。这也是我在做一个医药项目的时候遇到的问题,播放器在全屏后可以选择点开目录选择播放章节,再切回到竖屏状态,目录要变化,就需要在这个方法中进行操作。
6.onNewIntent:最后介绍一个可能很多人都没用过的方法。这个方法涉及到activity的四种启动模式。即当的activity的启动模式为SingleTask的时候,此activity重新到栈顶的时候调用。(去土豆面试的时候问到了)