持续更新中…
文章目录
7、请简述 retrofit 中,一个方法的执行流程
首先我们通过我们 create 出来的 retrofit 实例来调用接口方法。所有的 interface 方法都会在 java 动态代理机制的作用下,调用一个匿名类 new InvocationHandler 中的 invoke。在 invoke 中,会根据我们想调用的方法 method 构造出一个 serviceMethod,然后调用 serviceMethod.callAdapter.adapt(okHttpCall) 作为返回结果。
构造 serviceMethod 的时候,会根据 interface 中 method 的的返回类型,构造出 converter 和 callAdapter。其中, converter 一般使用 gson converter。gson converter 可以自动将服务器返回的 json 数据转化成 java 中的 model 类的实例。callAdapter 绝大多数的实现方式是在构造函数中接收一个 okHttpCall 实例,然后将 enqueue 和 execute 委托给这个 okHttpCall 实例来执行。okHttpCall 在获取到服务器数据之后,会利用 serviceMethod.toResponse(body) 来对数据进行转化。其中,转化的时候便利用了 converter。数据转化完成后,封装成 Response ,传递给调用方。其中 R 就是我们的数据类。
6、JVM运行时数据区栈区中的栈帧主要由哪些部份组成?它们的作用分别是?
- 局部变量表 用于存放八大基本数据类型和对象的引用
- 操作数栈 存放操作数的一块临时空间
- 动态链接 存放编译时不能确定方法入口的方法的地址 需要在运行时来保证方法调用的正确性
- 方法出口(返回地址)
5、弱引用应用场景
- 如果一个对象是偶尔的使用,并且希望在使用时随时就能获取到,但又不想影响此对象的垃圾收集,那么应该用 Weak Reference 来记住此对象。
- 想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候就应该用弱引用,这个引用不会在对象的垃圾回收判断中产生任何附加的影响。
4、v3签名key和v2还有v1有什么区别
在v1版本的签名中,签名以文件的形式存在于apk包中,这个版本的apk包就是一个标准的zip包,V2和V1的差别是V2是对整个zip包进行签名,而且在zip包中增加了一个apk
signature block,里面保存签名信息。 v2版本签名块(APK Signing Block)本身又主要分成三部分:
SignerData(签名者数据):主要包括签名者的证书,整个APK完整性校验hash,以及一些必要信息。
Signature(签名):开发者对SignerData部分数据的签名数据 PublicKey(公钥):用于验签的公钥数据。
v3版本签名块也分成同样的三部分,与v2不同的是在SignerData部分,v3新增了attr块,其中是由更小的level块组成。每个level块中可以存储一个证书信息。前一个level块证书验证下一个level证书,以此类推。最后一个level块的证书,要符合SignerData中本身的证书,即用来签名整个APK的公钥所属于的证书。
3、为什么在onCreate中View.post可以获取View宽高
2、isAssignableFrom 与 instanceof 的区别
isAssignableFrom是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。
instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。
1、在项目开发中使用的屏幕适配方案是什么样的?
- 使用dimens
- 使用谷歌的自动布局或百分比布局
- 自定义适配布局文件
- 对于手机与平板的适配,使用Layout目录
- 切入源码层实现