
Android
文章平均质量分 64
黑森林中的小木屋
这个作者很懒,什么都没留下…
展开
-
Android中为什么taskAffinity只能配合SingleTask和FLAG_NEW_TASK一起使用?
这其实涉及到Activity排序的问题。大家发现没有,不管什么启动模式,都不会打乱栈内Activity的顺序。看例子:有A,B,C三个页面,其中A,B默认taskAffinity,C的taskAffinity为tc。下面的例子基于假设:碰到taskAffinity查找对应的任务栈,没有就新建,有就复用为什么Standard配合taskAffinity无效?此时,A,B,C的启动模式都是standard,假设Standard配合taskAffinity有效首先启动A,A存放在默认栈中A启动B,B原创 2021-12-29 16:39:04 · 1727 阅读 · 0 评论 -
OKHttp4(二)——拦截器(五)——CallServerInterceptor
文章目录前言过程问题前言该拦截器的作用就是使用上一个ConnectInterceptor开辟的I/O窗口,通过这个窗口向Socket管道内读取/写入数据。然后将服务器的响应构建为一个Response返回,最后根据Connection头信息判断需不需要关闭连接过程如果该请求带有Body,则会检测请求中有没有Expect:100-continue头信息,如果有则仅仅发送头信息,待服务器返回响应确认可以发送body后,才会接着发送body判断需不需要分块发送读取响应,构建Response判断需不需原创 2021-11-03 17:10:14 · 227 阅读 · 0 评论 -
OKHttp4(二)——拦截器(四)——ConnectInterceptor
文章目录1. 前言2. I/O2.1 Exchange2.2 ExchangeCodec2.3 ExchangeFinder3. 连接(Connection)3.1 可用连接1. 前言总的来说:该拦截器的作用是给当前的请求(Call)分配一个Exchange,在后面一个拦截器中,使用这个Exchange进行I/O操作。其会利用ExchangeFinder来获取一个运行在可用连接上的ExchangeCodec。然后由此ExchangeCodec来构建一个exchange详细的说:该类涉及到了I/O原创 2021-11-03 15:26:08 · 502 阅读 · 0 评论 -
OKHttp4 全面解析(二)——拦截器(三)——CacheInterceptor
文章目录前言缓存命中策略更新/保存缓存可能触发的事件前言看名字就知道此拦截器的作用是处理缓存。具体来说就是:对于某个请求,查找合适的缓存。若没有则向下一个拦截器传递更新缓存缓存命中策略底层采用DiskLruCache框架进行缓存命中策略:根据HTTP的头信息:Cache-ControlCache-Control:Max-AgeExpireLast-ModifiedVary等头信息来决定是否命中缓存。更新/保存缓存只会缓存GET方法请求的响应可能触发的事件原创 2021-11-01 10:59:22 · 303 阅读 · 0 评论 -
OKHttp4 全面解析(二)——拦截器(二)——BridgeInterceptor
文章目录1.前言2.用户请求转化为网络请求3. 将网络响应转化为用户响应1.前言该拦截器的作用:将用户请求转化为网络请求将网络响应转化为用户响应用户请求:用户创建的请求网络请求:真正发送的请求用户响应:经过解码/解压缩的网络响应网络响应:真正接收到的响应更具体点的就是,这个拦截器会帮你添加Cookies,解码/解压缩收到的响应2.用户请求转化为网络请求听着挺唬人的,其实就是为了防止用户请求的一些头信息不符合HTTP 规范,而做的一个检查机制。会从用户请求中新建一个请求。在新的请求上原创 2021-10-29 17:26:47 · 457 阅读 · 0 评论 -
OKHttp 4全面解析(二)——拦截器(一):RetryAndFollowUpInterceptor拦截器
此拦截器的主要功能:错误重试和重定向跟踪错误重试发生错误后,首先会判断该请求是不是可恢复的有以下情况之一,则该请求是不可恢复的,否则是可恢复的配置了retryOnConnectionFailure为false,即指定错误时不恢复请求只能发送一次,并且已经发送了(已经发送是指,请求已经经过了所有的拦截器处理,数据已经写入到Socket中)当错误类型为:底层协议出错、使用Https协议时,证书认证出错,证书锁定出错。没有可用路由重定向...原创 2021-10-28 16:46:35 · 1628 阅读 · 0 评论 -
Android Binder跨进程通信
1、跨进程的原理跨进程通信必须经过第三方介质,要么是内存,要么是外存(文件)以内核为例:进程A将自己的数据拷贝到内核中,进程B在将内核中的数据拷贝到进程B中。问:跨进程通信需要内核的支持,Binder不是内核的一部分,为什么可以支持跨进程通信?答:Binder采用了Linux的动态内核可加载模块机制,将Binder作为一个内核模块加载到了内核空间,这个模块叫Binder驱动Binder采用了Linux中的内存映射技术,减少了数据的拷贝次数,提高了效率2、Binder通信过程中涉及到的模型原创 2021-08-17 16:05:17 · 355 阅读 · 0 评论 -
SharedPreference的一些知识
**先说结论:1、SharedPreference是否是线程安全的,是否是进程安全的?SharedPreference是线程安全的,不是进程安全的**2、为什么SharedPreference不适合存储大量数据?因为SharedPreference是一次性将所有数据都加载到内存中的3. SharedPreference中apply与commit的区别?apply是异步的,其会将操作封装成一个事务,然后将事务提交到线程池,具体执行时间要看线程池的调度commit是同步的,其会在当前线程执行。原创 2021-08-16 17:33:02 · 767 阅读 · 0 评论 -
Loop为什么没有卡死主线程
文章目录1、为什么不卡主线程2、主线程在消息循环时占用CPU资源吗?1、为什么不卡主线程说Loop不卡主线程也不准确,其实是卡的,那么为什么我们感受不到呢,因为很多工作不是在主线程完成的。在开始循环Loop之前,会开启一个线程,这个线程会处理一些工作,然后通过消息机制回调到主线程,主线程被唤起,所以我们感受不到卡顿。为什么在主线程执行长时间操作会卡顿?因为view的绘制是在主线程进行的,虽然消息传递的很及时,但是主线程来不及处理,所以会造成卡顿2、主线程在消息循环时占用CPU资源吗?原创 2021-08-16 14:56:18 · 295 阅读 · 0 评论 -
Android指纹识别,兼容Android 6.0 - Android 11
目录前言概览1.类2.权限详细介绍1.`BiometricManager`属性和方法是否可用的状态码2.`BiometricPrompt`属性和方法实战参考:写作不易,转载请注明出处前言官方的指纹识别在Android 6.0引入,Android 6.0之前指纹识别由厂商自己定义。所以Android 6.0之前的指纹识别碎片化严重。概览1.类1.FingerprintManager:Android 6.0引入,Android 9.0 废弃。使用时需加入权限:permission USE_FIN原创 2021-07-15 15:39:33 · 2963 阅读 · 4 评论