什么是引用,四种引用是什么
在Java中的引用类型,是指除了基本的变量类型之外的所有类型,所有的类型在内存中都会分配一定的存储空间,基本的变量类型只有一块存储空间(分配在stack中), 而引用类型有两块存储空间(一块在stack中,一块在heap中), 形参和传进来的参数在(heap)中;
(1)StrongReference(强引用)
强引用就是平时经常使用的,如常规new Object()。如果一个对象具有强引用,那垃圾回收器绝不会回收。内存不足,甚至出现OOM时,也不会随意回收强引用的对象。
(2)SoftReference(软引用)
在内存空间足够,垃圾回收器不会回收它;如果内存空间不足,垃圾回收器就会回收软引用的对象。
(3)WeakReference(弱引用)
弱引用相对软引用,具有更短暂的生命周期。常规的GC,只要被扫描到,都会直接被回收。
(4)PhantomReference(虚引用)
虚引用在任何时候都可能被垃圾回收器回收,主要用来跟踪对象被垃圾回收器回收的活动。
如何优化listview中加载大量大图片
图片加载开源框架 VolleyImageLoader 、Universal-Image-Loader
图片缓存原理:
① UI:请求数据,使用唯一的Key值索引Memory Cache中的Bitmap。
② 内存缓存:缓存搜索,如果能找到Key值对应的Bitmap,则返回数据。否则执行第三步。
③ 硬盘存储:使用唯一Key值对应的文件名,检索SDCard上的文件。
④ 如果有对应文件,使用BitmapFactory.decode*方法,解码Bitmap并返回数据,同时将数据写入缓存。如果没有对应文件,执行第五步。
⑤ 下载图片:启动异步线程,从数据源下载数据(Web)。
⑥ 若下载成功,将数据同步缓存
android系统的启动过程 – 应用执行过程
android系统的启动过程:
1、启动加载内核
2、执行init进程、初始化设备、启动系统中的重要外部程序Zygote进程(Android 所有进程的孵化器进程)
3、Zygote进程启动后首先是初始化Dalvik虚拟机
4、启动system_server进入Zygote模式,通过Socket等候命令
app启动原理:调用startActivity(Intent), 会通过Binder IPC机制, 最终调用到ActivityManagerService,这个Service会执行如下操作:
1、收集这个intent对象的指向信息
2、验证用户是否有足够的权限去调用该intent对象指向的Activity
3、如果有权限, ActivityManagerService会在新的task中启动目标activity
网友评论