Android 面试基础

来源:互联网 发布:下软件送流量 编辑:程序博客网 时间:2024/03/28 21:31

1.Service

1.1Service和Thread的区别

A.定义Service运行在主线程,不能做耗时操作。可以独立运行在后台中。如果需要在Service做耗时操作一定要独立开启个线程来执行Thread作为子线程,activity finish掉的时候其就不存在了。B.实际开发线程一般指定是功能线程,而主线程是ui线程,不能做耗时操作,service运行在ui线程中,无法做耗时操作service被称为后台线程是因为没有ui。C应用场景播放音乐,开启天气预报统计等

1.2startservice

  1. 定义一个类继承Sercvice
  2. 在Manifest.xml文件中配置该Service
  3. 使用Context的startService(Intent)方法启动该Service
  4. 不再使用时,调用stopService(Intent)方法停止该服务

1.3bindService

  1. 创建BindService服务端,继承自Service并在类中创建一个实现IBinder接口的实例对象并提供公共方法给客户端调用
  2. 从onBind()灰调方法返回此Binder实例。
  3. 在客户端中,从onServiceConnected()回调方法接收Binder,并使用提供的方法调用绑定服务

Brodacast Receiver 面试详解

1.定


在Andorid中,Broadcast是一种广泛运用的在应用程序之间传递信息的机制,Android中我们要发送广播内容是一个Intent,这个Intent中可以携带我们要传递的数据

2广播的使用场景

A同一个app具有多个进程的不同组件之间的消息通讯
B不同app之间的组件之间消息通讯

3广播种类

  1. Normal Broadcast: Context.sendBroadcast
  2. System Broadcast: Context.sendOrderedBroadcast
  3. Local Broadcast:只在自身App内传播

4实现广播-receiver

  1. 静态注册:注册完成就一直运行
  2. 动态注册:跟随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中常见的一些坑

  1. Android API level 16及以前的版本存在远程代码执行安全漏洞 ,该漏洞愿与程序没有正确限制使用Webview.addJavascriptlnterface方法,远程攻击者可通过使用Java Reflection API执行任意java对象方法。
  2. webview在布局文件中的使用:webview写在其他容器时(例如
    linerlayout中addview(webview)的时候,当离开actiivty时候,必须想要remove(webview),再调用webview.removeAllView(),和webview.destroy())
  3. jsbridge
  4. webviewClient.onPageFinished–>WebChromeClient.onProgressChanged(多页面打开后面的靠谱)
  5. 后台耗电。如果没正确销毁的话就会导致耗电

2关于webview的内存泄露问题

  1. 独立进程,简单暴力。涉及到进程间通讯
  2. 动态添加Webview,对传入webview中使用Context使用弱引用,动态添加WebView意思在布局建一个ViewGroup来放置webview,Activity创建时add进来,在Activity停止时remove掉

4Binder面试详解

框架

Okhttp:

这里写图片描述

Retrofit
retrofit源码剖析-动态代理

  1. 首先,通过method把它转换为ServiceMethod;
  2. 然后,通过serviceMethod,args获到okHttpCall对象;
  3. 最后,再把okhtpCall进一步封装并返回Call对象
原创粉丝点击