1.Service
1.1Service和Thread的区别
A.定义
Service运行在主线程,不能做耗时操作。可以独立运行在后台中。
如果需要在Service做耗时操作一定要独立开启个线程来执行
Thread作为子线程,activity finish掉的时候其就不存在了。
B.实际开发
线程一般指定是功能线程,而主线程是ui线程,不能做耗时操作,service运行在ui线程中,无法做耗时操作service被称为后台线程是因为没有ui。
C应用场景
播放音乐,开启天气预报统计等
1.2startservice
- 定义一个类继承Sercvice
- 在Manifest.xml文件中配置该Service
- 使用Context的startService(Intent)方法启动该Service
- 不再使用时,调用stopService(Intent)方法停止该服务
1.3bindService
- 创建BindService服务端,继承自Service并在类中创建一个实现IBinder接口的实例对象并提供公共方法给客户端调用
- 从onBind()灰调方法返回此Binder实例。
- 在客户端中,从onServiceConnected()回调方法接收Binder,并使用提供的方法调用绑定服务
Brodacast Receiver 面试详解
1.定
义
在Andorid中,Broadcast是一种广泛运用的在应用程序之间传递信息的机制,Android中我们要发送广播内容是一个Intent,这个Intent中可以携带我们要传递的数据
2广播的使用场景
A同一个app具有多个进程的不同组件之间的消息通讯
B不同app之间的组件之间消息通讯
3广播种类
- Normal Broadcast: Context.sendBroadcast
- System Broadcast: Context.sendOrderedBroadcast
- Local Broadcast:只在自身App内传播
4实现广播-receiver
- 静态注册:注册完成就一直运行
- 动态注册:跟随activity的生命周期(记得回收)
5内部实现机制
1. 自定义广播接受者BroadcastReceiver,并复写onRecvice()方法;
2. 通过Binder机制向AMS(Activity Manager Service)进行注册;
3. 广播发送者通过Binder机制向AMS发送广播
4. AMS查找符合相应条件(IntentFIlter/Permission等)的BroadcastReceriver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
5. 消息循环队列执行拿到此广播,回调BroadcastReceiver中的receiver方法()
3webView面试详解
1.Webview中常见的一些坑
- Android API level 16及以前的版本存在远程代码执行安全漏洞 ,该漏洞愿与程序没有正确限制使用Webview.addJavascriptlnterface方法,远程攻击者可通过使用Java Reflection API执行任意java对象方法。
- webview在布局文件中的使用:webview写在其他容器时(例如
linerlayout中addview(webview)的时候,当离开actiivty时候,必须想要remove(webview),再调用webview.removeAllView(),和webview.destroy()) - jsbridge
- webviewClient.onPageFinished–>WebChromeClient.onProgressChanged(多页面打开后面的靠谱)
- 后台耗电。如果没正确销毁的话就会导致耗电
2关于webview的内存泄露问题
- 独立进程,简单暴力。涉及到进程间通讯
- 动态添加Webview,对传入webview中使用Context使用弱引用,动态添加WebView意思在布局建一个ViewGroup来放置webview,Activity创建时add进来,在Activity停止时remove掉
4Binder面试详解
框架
Okhttp:
Retrofit
retrofit源码剖析-动态代理
- 首先,通过method把它转换为ServiceMethod;
- 然后,通过serviceMethod,args获到okHttpCall对象;
- 最后,再把okhtpCall进一步封装并返回Call对象