Android开发中的优化

Android的优化可以大致归类一下:
(1)优化UI
(2)优化内存使用,方式泄露造成OOM;
(3)在项目中根据具体需求设计提高用户体验:同步事件->异步事件;使用Cache技术;
(4)Java语言本身使用时应该注意效率方面;

(1)View相关
ListView、layout层次、(ViewStub、include、merge)。
其中:merge:只能放在顶层layout布局中,优化layout的布局层次,去除多余的层次;

ListView优化:
1)重用View、使用ViewHolder(setTag)、
2)如果ListView需要显示大量items时,默认在getView的时候只显示默认图片(不去服务器上加载图片),
并重写ListView的onScrollListener,当idel时再请求加载图片,而且只加载当前这一屏幕的图片;
原因:如果在getView中加载图片,那么当快速滑动的时候,大量的请求线程就会执行,
导致进程内内存资源被大量线程占用,主UI线程的内存资源就会不足,导致卡顿。
3)ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。

(2)
究其原因:长生命周期的对象中引用了短生命周期的对象,导致短生命周期中的对象释放不了;
1)图片Cache、采样、缩放、剪切;
2)及时关闭文件I/O、数据库Cursor、Socket对象,防止内存泄露;
3)内部类(子线程、Handler)必须使用static定义,防止内存泄露;
4)static变量引用Activity的Context问题;
5)单例对象引用Activity的Context问题;4)、5)可以使用Application的Context代替;
6)可以解决方法有使用4种引用的WeakReference、SoftReference。
7)Dialog造成的Window Leaked。

(3)
1)复杂耗时的计算或请求使用独立线程 or 线程池,比如:文件I/O、HTTP请求、数据库访问。
2)使用Cache缓存技术,不仅仅是加载图片需要,其实在项目设计中都是需要Cache的,为了提高用户体验,
加载速度快,使用Cache技术时候注意Cache中数据同步问题。

缓存Cache技术使用的场合:Cache使用的话也不能滥用,一般是用在缓存的数据变动比较小的场合,如果
缓存中的内容经常变动,那么就没有必要了,就相当于每次都从服务器拉去数据。

(4)
Java语言本身的性能考虑:
内部类;
static成员变量(引用);
尽早置对象引用为null;
for循环本地化;
枚举enum的好处与坏处:产生很多static的变量;
使用实体类比接口好:避免多态虚函数调用;
final修饰类;
java的四种引用的用处;
减少不必要的的全局变量;
使用jni的C层完成一些关键代码,但是有个问题是:要考虑jni层的性能;
使用高效库:比如:System.arrayCopy()等等;
避免使用浮点数;
静态方法代替成员方法:如果方法没有使用类中的成员变量,则尽量将其写为static的。
避免创建不必要的对象;
JIT:字节码编译 -> 动态编译 -> JIT优化解释字节码为机器码;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值