1、View优化
(1)、减少使用view,或者嵌套view:比较尽可以的使用相对布局,而不是用线性比较嵌套;
(2)通过Layoutopt优化布局
通过Android sdk中tools目录下的layoutopt 命令查看你的布局是否需要优化。
2、多线程解决赋值操作:
占用CPU较多的数据操作尽可能放在一个单独的线程中进行,通过handler等方式把执行的结果交于UI线程显示。
特别是针对的网络访问,数据库查询,和复杂的算法。
===》目前Android提供了AsyncTask,Hanlder、Message和Thread的组合。
分析:
对于多线程的处理,如果并发的线程很多,同时有频繁的创建和释放,可以通过concurrent类的线程池解决线程创建的效率瓶颈。
另外值得注意的是,应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据TouchListener事件主动触发界面的更新。
3、布局用Java完成比XML快
4、 对大型图片进行缩放
问题:
用BitmapFactory解码一张图片时,有时也会遇到该错误。这往往是由于图片过大造成的。
解决:
这时我们需要分配更少的内存空间来存储。BitmapFactory.Options.inSampleSize设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。
设置:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 4 ;// 4就代表容量变为以前容量的1/4
Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
关闭回收资源:
bitmap.recycle();
bitmap = null;
5、合理使用ViewStub
ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。
当ViewStub可见,或者调用 inflate()函数时,才会加载这个布局资源文件。
该ViewStub在加载视图时在父容器中替换它本身
6、针对ListView的性能优化
异步加载图片、快速滑动不显示图片、item中尽可能减少使用的控件、
7、适配器中的getview的优化:
getView方法中要重用view;
特别是数据库和网络访问操作,
否则会严重影响滑动时的性能。
代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("Adapter", "Position:" + position + " : " + String.valueOf(System.currentTimeMillis()));
ViewHolder holder;
if (convertView == null) {
final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.icon.setImageResource(R.drawable.icon);
holder.text.setText(mData[position]);
return convertView;
}
static class ViewHolder {
ImageView icon;
TextView text;
}
}
8、资源:
分辨率适配、使用dp、多用wrap_content、fill_parent、抛弃absolute布局、使用png格式、采用 优化布局层数;采用来共享布局/将Acitivity中的Window的背景图设置为空。getWindow().setBackgroundDrawable(null);android的默认背景是不是为空/View中设置缓存属性.setDrawingCache为true