13、提升Android UI流畅度的建议

来源:互联网 发布:淘宝考试答题器 编辑:程序博客网 时间:2024/04/30 21:25

在一个Android应用程序中,UI是与用户直接面对面交互的,UI的流畅度,直接影响了用户体验。

一、布局文件的优化

1、减少布局的层次

很多时候,实现一个界面有很多种方式,我们应该就可能的减少布局的层次,不要一味地嵌套再嵌套。

可以通过HierarchyViewer工具来查看布局层次。

2、尽量用TextView代替ImageView

按钮在布局中是最常见使用的控件,我们可以用Button,ImageButton,ImageView,TextView来实现按钮的效果。但是图片的加载是很慢的,之前在做联系人拨号盘时,拨号盘的布局是4行3列的Tablayout,每个TabRow是一个ImageButon。这样看起来是会省事不少,只需要UI给切24张图即可。然而,我们在优化联系人启动速度的时候,发现拨号盘加载布局耗时60ms。60ms对于仅仅加载一个布局来说,是很耗时的了。由于分割线的原因,我采用了一个垂直的LinearLayout嵌套六个水平的LinearLayout,其中拨号盘部分的四个LinearLayout再嵌套三个垂直的LinearLayout。每个LinearLayout包含一个数字TextView和字母的TextView。

2、使用include和merge标签重用布局文件

相同的布局,例如顶部栏和底部栏,可以使用include重用,既易于后期修改,也增加布局的复用性。

3、ViewStub按需加载布局

viewstub可以实现延迟加载View的作用。当调用ViewStub的setVisibility函数设置为可见或则调用inflate初始化该View的时候,ViewStub引用的资源开始初始化,然后引用的资源替代ViewStub自己的位置填充在ViewStub的位置。在联系人详情界面中,需要显示的内容很多,包括姓名,号码,邮箱,工作,备注,昵称,铃声,地址,生日,网址,关系,分组。然而大部分人添加联系人并不会全都填写,所以很多布局如果预先加载就会浪费,使用ViewStub可以有效的解决这个问题,

二、耗时操作放在多线程,防止阻塞UI线程。

使用handle多线程或者异步任务加载耗时任务,如数据库操作,IO操作,网络读取等

三、ListView的优化

1、使用ViewHolder,设置TAG,

public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder;    if (convertView == null) {            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);            holder = new ViewHolder();            holder.icon1 = (ImageView) convertView.findViewById(R.id.icon1);            holder.text1 = (TextView) convertView.findViewById(R.id.text1);            convertView.setTag(holder);    }    else{            holder = (ViewHolder)convertView.getTag();    }        holder.icon1.setImageResource(R.drawable.icon);        holder.text1.setText(mData[position]);        return holder;}static class ViewHolder {        TextView text1;        ImageView icon1;}

2、快速滑动时,不加载数据。

重写OnScrollListener的onScrollStateChanged()方法。

  • OnScrollListener.SCROLL_STATE_IDLE–>停止滑动
  • OnScrollListener.SCROLL_STATE_TOUCH_SCROLL–>正在滑动
  • OnScrollListener.SCROLL_STATE_FLING –>快速滑动

其中OnScrollListener.SCROLL_STATE_FLING建议不要加载数据。在通话记录界面,号码归属地并没有写入数据库,而是通过查询得到。当通话记录过多,而ListView还没有缓存这些归属地,那么快速滑动的时候就会感觉到严重卡顿。我们可以在快速的时候,停止加载归属地,结束滑动的时候重新加载归属地。

四、使用缓存

使用缓存,优化数据读取速度。

五、使用动画。

比如界面切换页面使用动画比直接显示感觉就会好很多。

1 0