
自己线刷升级就行。先解锁,然后下载小米助手升级线刷。
小米手机由于早期安卓系统的问题,你的ROM其实是被分成两个区的,一个放系统和APP,一个用来存储文件。在50时代,官方给过小米2S系列一个合区的包,你可以去MIUI论坛找找,需要线刷并且清空所有数据。
介绍
线刷是利用线刷工具,通过数据线连接电脑和手机,给手机刷入线刷固件的一种刷机方式。既可以用来刷入最新固件来升级,也可以修复系统或软件故障造成的手机黑屏、死机等问题。无需root,无需替换官方recovery,即可直接刷机。
线刷是手机厂商、售后以及个人用户都可以使用的一种刷机方式。
分为:内部存储和外部存储
如何区分内部存储和外部存储:可以从物理和逻辑区分
从物理的角度区分,内部存储就是手机自带存储空间,外部存储就是外部接入的存储空间例如SD卡
从逻辑意义上区分,data,system 目录就是手机的内部存储,而 mnt 或者 storage目录下的sdcard0指向的sdcard目录就是外部存储。如果是手机自带的外部存储被称为机身外部存储,外置的SD卡则称之为外部存储。当然两者都称为外部存储也没关系。这里描述的内部存储和机身外部存储都属于机身存储;
逻辑区分是从44以上版本开始的;
获取内部存储路径和api对应关系
1,通过Environment
2,通过上下文Context
BuildVERSION_CODESLOLLIPOP及以上版本新增的API
BuildVERSION_CODESN及以上版本新增的API
特点:
1、内部存储路径中的文件是分类存储的,我们无法干涉,除了cache目录,别的目录系统不会自动创建
2、除了files目录,别的目录我们几乎都是无法手动 *** 作的
3、别的App几乎无法访问内部存储中的数据,除了用非法手段或者我们主动暴露
4、内部存储目录下的文件夹及文件会随着app的卸载而被系统自动删除
外部存储又可分为共有目录和私有目录;
私有目录
私有目录:不需要访问权限
Android 在外部存储空间中也提供了特殊目录供App存放私有文件,该路径为:/storage/emulated/0/Android/data/包名/
注意:应用安装之后/storage/emulated/0/Android/data/是没有对应的应用文件夹的,需要手动调用对应的API创建;
获取私有目录路径
共有目录
共有目录:需要申请权限才能访问
权限:60以上需要动态申请
获取共有目录的API 29中已过时:
本文源码解析基于Glide 461
系列文章
Android 手撕Glide--Glide缓存机制
Android 手撕Glide--Glide缓存机制(面试)
Android 手撕Glide--Glide是如何关联生命周期的?
Glide缓存分为内存缓存和磁盘缓存,其中内存缓存是由弱引用+LruCache组成。
取的顺序是:弱引用、LruCache、磁盘
存的顺序是:磁盘、弱引用、LruCache
这张亲手制作的,方便大家更直观的理解缓存机制的整体流程,结合文末总结效果更佳。喜欢的记得点赞!
概述
1、弱引用是由这样一个HashMap维护,key是缓存的key,这个key由url、width、height等10来个参数组成;value是资源对象的弱引用形式。
2、LruCache是由一个LinkedHashMap维护,根据Lru算法来管理。大致的原理是利用linkHashMap链表的特性,把最近使用过的文件插入到列表头部,没使用的放在尾部;然后当大小到达预先设置的一个阀值的时候 ,按算法删除列表尾部的部分数据。由于篇幅有限,这里不讲解LruCache和DiskLruCache的底层原理,这里推荐一篇 图解LinkedHashMap原理
这是Glide自定义的LruCache
存取原理
取数据
在内存缓存中有一个概念叫引用计数器 ,具体来说是在 EngineResource 中定义一个 acquired 变量用来记录被引用的次数,调用 acquire() 方法会让变量加1,调用 release() 方法会让变量减1。
获取资源是先从弱引用取缓存,拿到的话,引用计数+1;没有的话从LruCache中拿缓存,拿到的话,引用计数也是+1,同时把从LruCache缓存转移到弱应用缓存池中;再没有的话就通过 EngineJob 开启线程池去加载,拿到的话,引用计数也是+1,会把放到弱引用。
存数据
很明显,这是加载之后的事情。通过 EngineJob 开启线程池去加载,取到数据之后,会回调到主线程,把存到弱引用。当不再使用的时候,比如说暂停请求或者加载完毕或者清除资源时,就会将其从弱引用中转移到 LruCache 缓存池中。 总结一下,就是正在使用中的使用 弱引用 来进行缓存,暂时不用的使用 LruCache 来进行缓存的功能;同一张只会出现在 弱引用 和 LruCache 中的一个。
为什么要引入软引用?
1、分压策略,减少Lrucache 中 trimToSize 的概率。如果正在remove的是张大图,lrucache正好处在临界点,此时remove *** 作,将延缓Lrucache的 trimToSize *** 作;
2 提高效率:弱引用用的是 HashMap ,Lrucache用的是 LinkedHashMap ,从访问效率而言,肯定是 HashMap 更高。
Glide磁盘缓存策略(4x)
如果在内存缓存中没获取到数据会通过 EngineJob 开启线程池去加载,这里有2个关键类: DecodeJob 和 EngineJob 。 EngineJob 内部维护了线程池,用来管理资源加载,当资源加载完毕的时候通知回调; DecodeJob 是线程池中的一个任务。
磁盘缓存是通过 DiskLruCache 来管理的,根据缓存策略,会有2种类型的, DATA (原始)和 RESOURCE (转换后的)。磁盘缓存依次通过 ResourcesCacheGenerator 、 SourceGenerator 、 DataCacheGenerator 来获取缓存数据。 ResourcesCacheGenerator 获取的是转换过的缓存数据; SourceGenerator 获取的是未经转换的原始的缓存数据; DataCacheGenerator 是通过网络获取数据再按照按照缓存策略的不同去缓存不同的到磁盘上。
Glide缓存分为 弱引用+ LruCache+ DiskLruCache ,其中读取数据的顺序是:弱引用 > LruCache > DiskLruCache>网络;写入缓存的顺序是:网络 --> DiskLruCache--> LruCache-->弱引用
内存缓存分为弱引用的和 LruCache ,其中正在使用的使用弱引用缓存,暂时不使用的用 LruCache缓存,这一点是通过 引用计数器(acquired变量)来实现的,详情可以看内存缓存的小结。
磁盘缓存就是通过DiskLruCache实现的,根据缓存策略的不同会获取到不同类型的缓存。它的逻辑是:先从转换后的缓存中取;没有的话再从原始的(没有转换过的)缓存中拿数据;再没有的话就从网络加载数据,获取到数据之后,再依次缓存到磁盘和弱引用。
参考:
面试官:简历上最好不要写Glide,不是问源码那么简单
原来面试的时候写精通Glide,这样问我这样答
以上就是关于小米手机提示系统cache分区空间不足无法更新怎么解决全部的内容,包括:小米手机提示系统cache分区空间不足无法更新怎么解决、Android存储及路径、Android 【手撕Glide】--Glide缓存机制(面试)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)