20140430 OOM、FutureTask、LruCache、instanceof
1、OOM
解决OOM的常用方案
内存限制是Android对应用的一个系统级限制,作为应用层开发人员,没有办法彻底去消灭这个限制,但是可以通过一些手段去合理使用内存,从而规避这个问题。以下是个人总结的一些常用方法:
(1)缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都从新加载到内存;
(2)调整图像大小,手机屏幕尺寸有限,分配给图像的显示区域本身就更小,有时图像大小可以做适当调整;
(3)采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;
(4)及时回收图像,如果引用了大量Bitmap对象,而应用又不需要同时显示所有图片,可以将暂时用不到的Bitmap对象及时回收掉;
(5)自定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配;
2、FutureTask
FutureTask类是Future 的一个实现,并实现了Runnable,
所以可通过Executor(线程池) 来执行,也可传递给Thread对象执行。
如果在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,
可以把这些作业交给Future对象在后台完成,当主线程将来需要时,
就可以通过Future对象获得后台作业的计算结果或者执行状态。
Executor框架利用FutureTask来完成异步任务,并可以用来进行任何潜在的耗时的计算。
一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。
http://blog.sina.com.cn/s/blog_a4bfe8c90101kwb1.html
3、LruCache
图片预取缓存策略是内存缓存(硬引用LruCache、软引用SoftReference)、
外部文件缓存(context.getCachedDir()),缓存中取不到的情况下再向服务端请求下载图片。
同时缓存三张图片(当前预览的这张,前一张以及后一张)。
http://blog.csdn.net/baodinglaolang/article/details/8880325
4、unicode:采用双字节对字符进行编码;统一的字符编码标准
5、instanceof
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。
instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。
如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
明天就51了放假3天,好好休息
阅读(1067) | 评论(0) | 转发(0) |