在工作中有不少朋友联系我,问我有没有相关推荐的书或者资料可以学习的。
自己也在不断的学习和提升,所以再这些过程中吧遇到的面试题整理了出来
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取
一.Android中高级面试题
1、Activity生命周期?
onCreate()
-> onStart()
-> onResume()
-> onPause()
-> onStop()
-> onDetroy()
2、Service生命周期?
service 启动方式有两种,一种是通过startService()
方式进行启动,另一种是通过bindService()
方式进行启动。不同的启动方式他们的生命周期是不一样.
通过startService()
这种方式启动的service,生命周期是这样:调用startService()
--> onCreate()
–> onStartConmon()
–> onDestroy()
。这种方式启动的话,需要注意一下几个问题,
第一:当我们通过startService
被调用以后,多次在调用startService()
,onCreate()
方法也只会被调用一次,而onStartConmon()
会被多次调用当我们调用stopService()
的时候,onDestroy()
就会被调用,从而销毁服务。
第二:当我们通过startService
启动时候,通过intent传值,在onStartConmon()
方法中获取值的时候,一定要先判断intent是否为null。
通过bindService()
方式进行绑定,这种方式绑定service,生命周期走法:bindService
–>onCreate()
–>onBind()
–>unBind()
–>onDestroy()
bingservice
这种方式进行启动service好处是更加便利activity中操作service,比如加入service中有几个方法,a,b ,如果要在activity中调用,在需要在activity获取ServiceConnection
对象,通过ServiceConnection
来获取service中内部类的类对象,然后通过这个类对象就可以调用类中的方法,当然这个类需要继承Binder对象
3、Activity的启动过程(不要回答生命周期)
app启动的过程有两种情况,第一种是从桌面launcher上点击相应的应用图标,第二种是在activity中通过调用startActivity
来启动一个新的activity。
我们创建一个新的项目,默认的根activity都是MainActivity
,而所有的activity都是保存在堆栈中的,我们启动一个新的activity就会放在上一个activity上面,而我们从桌面点击应用图标的时候,由于launcher本身也是一个应用,当我们点击图标的时候,系统就会调用startActivitySately()
,一般情况下,我们所启动的activity的相关信息都会保存在intent中,比如action,category等等。我们在安装这个应用的时候,系统也会启动一个PackaManagerService
的管理服务,这个管理服务会对AndroidManifest.xml
文件进行解析,从而得到应用程序中的相关信息,比如service,activity,Broadcast等等,然后获得相关组件的信息。
当我们点击应用图标的时候,就会调用startActivitySately()
方法,而这个方法内部则是调用startActivty()
,而startActivity()
方法最终还是会调用startActivityForResult()
这个方法。而在startActivityForResult()
这个方法。因为startActivityForResult()
方法是有返回结果的,所以系统就直接给一个-1,就表示不需要结果返回了。
而startActivityForResult()
这个方法实际是通过Instrumentation类中的execStartActivity()
方法来启动activity,Instrumentation这个类主要作用就是监控程