Android第三方框架面试题

更新时间:2023-07-12 22:56:44 阅读: 评论:0

5,CallServer,读写数据流常⽤的⾃定义拦截器:
1,⽇志拦截器
2,⾃定义缓存规则拦截器
3,重试机制等等
1.4 谈⼀谈Glide的缓存机制?
Glide的缓存机制,主要分为2种缓存,⼀种是内存缓存,⼀种是磁盘缓存。
使⽤内存缓存的原因是:防⽌应⽤重复将图⽚读⼊到内存,造成内存资源浪费。
使⽤磁盘缓存的原因是:防⽌应⽤重复的从⽹络或者其他地⽅下载和读取数据。
具体来讲,缓存分为加载和存储:
1. 当加载⼀张图⽚的时候,获取顺序:Lru算法缓存-》弱引⽤缓存-》磁盘缓存(如果设置了的话)。
当想要加载某张图⽚时,先去LruCache中寻找图⽚,如果LruCache中有,则直接取出来使⽤,并将什么狗最聪明
该图⽚放⼊WeakReference中,如果LruCache中没有,则去WeakReference中寻找,如果WeakReference中有,则从WeakReference中取出图⽚使⽤,如果
WeakReference中也没有图⽚,则从磁盘缓存/⽹络中加载图⽚。
2. 将缓存图⽚的时候,写⼊顺序:弱引⽤缓存-》Lru算法缓存-》磁盘缓存中。
当图⽚不存在的时候,先从⽹络下载图⽚,然后将图⽚存⼊弱引⽤中,glide会采⽤⼀个acquired(int)变量⽤来记录图⽚被引⽤的次数, 当acquired变量⼤于0的时候,说明图⽚正在使⽤中,也就是将图⽚放到弱引⽤缓存当中;如果acquired变量等于0了,说明图⽚已经不再被使⽤了,那么此时会调⽤⽅法来释放资源,⾸先会将缓存图⽚从弱引⽤中移除,然后再将它put到LruResourceCache当中。
这样也就实现了正在使⽤中的图⽚使⽤弱引⽤来进⾏缓存,不在使⽤中的图⽚使⽤LruCache来进⾏缓存的功能。
另:从Glide4.x开始,读取图⽚的顺序有所改变:弱引⽤缓存-》Lru算法缓存-》磁盘缓存
1.5 ViewModel的出现是为了解决什么问题?并简要说说它的内部原理?
viewModel出现为了解决什么问题?
鲜汤看下viewModel的优点就知道了:
1. 对于activity/fragment的销毁重建,它们内部的数据也会销毁,通常可以onSaveInstanceState()防法保存,通过onCreate的bundle中重
新获取,但是⼤量的数据不合适,⽽vm会再页⾯销毁时⾃动保存并在页⾯加载时恢复。
2. 对于异步获取数据,⼤多时候会在页⾯destroyed时回收资源,随着数据和资源的复杂,会造成页⾯中的回收操作越来越多,页⾯处理ui的同
时还要处理资源和数据的管理。⽽引⼊vm后可以把资源和数据的处理统⼀放在vm⾥,页⾯回收时系统也会回收vm。加上databinding的⽀持后,会⼤幅度分担ui层的负担。
内部原理:
vm内部很简单,只有⼀个onClean⽅法。
vm的创建⼀般是这样ViewModelProviders.of(getActivity()).get(UrModel.class);
1. ViewModelProviders.of(getActivity())
在of⽅法中通过传⼊的activity获取构造⼀个HolderFragment,HolderFragment内有个ViewModelStore,⽽ViewModelStore内部的⼀个hashMap保存着系统构造的vm对象,HolderFragment可以感知到传⼊页⾯的⽣命周期(跟glide的做法差不多),HolderFragment构造⽅法中设置了tRetainInstance(true),所以页⾯销毁后vm可以正常保存。
长发背影图片
2. get(UrModel.class);
怎么钓螃蟹
获取ViewModelStore.hashMap中的vm,第⼀次为空会⾛创建逻辑,如果我们没有提供vm创建的Factory,使⽤我们传⼊的activity获取application创建AndroidViewModelFactory,内部使⽤反射创建我们需要的vm对象。
公派留学1.6 请说说依赖注⼊框架ButterKnife的实现原理?
1. 通过注解器在编译期间⽣成⼀个XX_ViewBinding.java⽂件(XX可以是activity,fragment,adapter,dialog),这个⽂件
这么⽣成的?
注解器⾥会添加需要类型的注解;
集美大学网络中心
观察日记大蒜查找XX类中的特定类型注解,如果有,拼接成字符串,创建并写到XX_ViewBinding.java⽂件中
2. XX_ViewBinding.java会持有XX的引⽤,如果是初始化控件,通过xx.findViewById实现如果是设置监听,类似xx.tOnClickListener实现
3. XX类中初始化XX_ViewBinding对象,这样打通了整个流程
1.7 谈⼀谈RxJava背压原理?
总共分为4种策略
1. BackpressureStrategy.ERROR:若上游发送事件速度超出下游处理事件能⼒,且事件缓存池已满,则抛出异常//阻塞时队列
2. BackpressureStrategy.BUFFER:若上游发送事件速度超出下游处理能⼒,则把事件存储起来等待下游处理
3. BackpressureStrategy.DROP:若上游发送事件速度超出下游处理能⼒,事件缓存池满了后将之后发送的事件丢弃
物理实验器材
4. BackpressureStrategy.LATEST:若上有发送时间速度超出下游处理能⼒,则只存储最新的128个事件

本文发布于:2023-07-12 22:56:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1093289.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:缓存   创建   资源   事件   处理   磁盘
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图