汪振华
汪振华
SingleTask栈内复用模式: 它与SingleTop类似,SingleTop只检查栈顶的Activity,SingleTask则检查是否存在这个任务栈; 每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task,当使用SingleTask来启动Activity时: taskAffinity不同,则会重新创建一个任务栈,然后把Activity放到新任务栈中 taskAffinity不重新指定,则会在原来的任务栈中寻找。如果没有,会在当前的任务栈中创建Activity。如果有则把上面的Activity全部出栈,同时也会调用onNewIntent方法;
Glide的缓存机制,主要分为2种缓存,一种是内存缓存,一种是磁盘缓存。 使用内存缓存的原因是:防止应用重复将图片读入到内存,造成内存资源浪费。 使用磁盘缓存的原因是:防止应用重复的从网络或者其他地方下载和读取数据。 具体来讲,缓存分为加载和存储: ①当加载一张图片的时候,获取顺序:Lru算法缓存-》弱引用缓存-》磁盘缓存(如果设置了的话)。 当想要加载某张图片时,先去LruCache中寻找图片,如果LruCache中有,则直接取出来使用,并将该图片放入WeakReference中,如果LruCache中没有,则去WeakReference中寻找,如果WeakReference中有,则从WeakReference中取出图片使用,如果WeakReference中也没有图片,则从磁盘缓存/网络中加载图片。 ②将缓存图片的时候,写入顺序:弱引用缓存-》Lru算法缓存-》磁盘缓存中。 当图片不存在的时候,先从网络下载图片,然后将图片存入弱引用中,glide会采用一个acquired(int)变量用来记录图片被引用的次数, 当acquired变量大于0的时候,说明图片正在使用中,也就是将图片放到弱引用缓存当中;如果acquired变量等于0了,说明图片已经不再被使用了,那么此时会调用方法来释放资源,首先会将缓存图片从弱引用中移除,然后再将它put到LruResourceCache当中。这样也就实现了正在使用中的图片使用弱引用来进行缓存,不在使用中的图片使用LruCache来进行缓存的功能。 另:从Glide4.x开始,读取图片的顺序有所改变:弱引用缓存-》Lru算法缓存-》磁盘缓存