一直很好奇,notifyDataSetChanged究竟是重绘了整个ListView还是只重绘了被修改的那些Item,它与重新设置适配器即调用setAdapter的区别在哪里?所以特地追踪了一下源码,过程如下: 一.notifyDataSetChanged实现机制 自定义Activity中有如下调用语句: checkoutAdapter.notifyDataSetChanged(); 点击notifyDataSetChanged()进行代码跟踪.首先,进入到BaseAdapter的notifyD…
JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永久代.永久代和元空间保存的数据并不完全一样,永久代中还保存另一些与类的元数据无关的杂项. 如我们之前的一篇文章016:字符串对象在JVM中是如何存放的中说的,在Java 7里将字符串常量从永久代移动到了堆区域,但是永久代并没有完全改造完成.直到Java 8,永久代的改造才算完全搞定,在元空间中保存的数据比…
一:首先看一下ArrayList类的结构体系: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 继承AbstractList抽象类,实现List接口.序列化接口等. 它的底层维护了一个Object[]数组,或者可以说它的底层数据结构是数组 /** * The array buffer in…
这一节看一下HashMap与HashTable这两个类的区别,工作一段时间的程序员都知道, hashmap是非线程安全的,而且key值和value值允许为null,而hashtable是非线程安全的,key和 value都不能为null,hashmap类所属方法没有synchronized修饰,源码如下: 获取map集合元素数量: public int size() { return size; } 判断map集合是否为空: public boolean isEmpty() { return s…
前面讨论过ArrayList与LinkedList的区别,ArrayList的底层数据结构是数组Object[],而LinkedList底层维护 的是一个链表Entry,所以对于查询,肯定是ArrayList的效率高,但是对于删除和插入则是LinedList效率高. 现在我们再来看看Vector与ArrayList的区别,直接上源码,ArrayList源码: 1:扩容方面,ArrayList扩容扩原来容量的2/3+1,而Vector扩容为原来容量的2倍 public void ensureCap…
BaseAdapter.notifyDataSetChanged()的实现涉及到设计模式-观察者模式,详情请参考我之前的博文设计模式之观察者模式 Ok,回到notifyDataSetChanged进行源码分析, Adapter本身不是被观察者Observable,而是adapter里面有一个被观察者DataSetObservable mDataSetObservable public void notifyDataSetChanged() { mDataSetObservable.notifyC…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/44014941,本文出自:[张鸿洋的博客] 本篇博客是我加入Android 开源项目源码解析分析的一篇文章,初次加入,所以选了个比较简单的库,如果你曾经看过Android 快速开发系列 打造万能的ListView GridView 适配器对本篇博客就不会太陌生, base-adapter-helper就是完成类似万能适配器的功能,当然了它本身不支持多种Item布局的情况,我们在下…
在前一篇文章 RecyclerView 源码分析(一) -- 绘制流程解析 介绍了 RecyclerView 的绘制流程,RecyclerView 通过将绘制流程从 View 中抽取出来,放到 LayoutManager 中,使得 RecyclerView 在不同的 LayoutManager 中,拥有不同的样式,使得 RecyclerView 异常灵活,大大加强了 RecyclerView 使用场景. 当然,RecyclerView 的缓存机制也是它特有的一个优点,减少了对内存的占用以及重复的…
一:imageLoader 先来看看如何使用imageloader: public void showImg(View view){ ImageView imageView = (ImageView)this.findViewById(R.id.image_view); RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); ImageLoader imageLoader = new ImageLoader(m…
documentsUI源码分析 本文基于Android 6.0的源码,来分析documentsUI模块. 原本基于7.1源码看了两天,但是Android 7.1与6.0中documentsUI模块差异很大,且更加复杂,因此重新基于6.0的源码分析. documentsUI是什么? documentsUI是Android系统提供的一个文件选择器,类似于Windows系统中点击"打开"按钮弹出的文件选择框,有人称documentsUI为文件管理器,这是不准确的. documentsUI是A…