之前项目为了同时兼容tv和手机端的UI,使用了百分比布局来动态计算控件的宽高,这种适配方案只关心屏幕的宽高(分辨率),与屏幕的像素密度无关。

在新的项目里也使用了这种方案。但是由于项目的运行硬件计算能力较差,单个界面的布局又比较复杂,在加载布局的时候,LayoutInflator的任务过重,
而LayoutInflator又是阻塞主线程的,所以会导致UI加载慢,甚至UI卡顿。

LayoutInflator通过反射把xml布局文件创建为具体的view对象,而反射的效率比直接new对象要慢3倍。设备性能差,加上布局文件又比较繁重,更是加剧了IO的阻塞。

在之前的博客中也提到过,可以通过异步加载布局的方式(http://www.cnblogs.com/liyilin-jack/p/10282385.html),缓解主线程的阻塞。
另一种方案,是使用new对象的方式替代xml布局的方式,iReader团队推出了x2c的开源库,把xml布局文件在编译器翻译为java布局文件,从而去除通过LayoutInflator反射创建view
的环节,来彻底解决该问题。

x2c框架的问题在于,一方面,对某些布局文件中的属性,尤其是自定义属性不支持,要想使用该框架,只能手动修改其apt部分的源码;另一方面,在编译期无法获取运行时的设备的属性,
如屏幕宽高等信息,导致无法做到UI的动态适配(如百分比适配)。所以,针对x2c框架,必须使用指定的UI适配方案,如美团的dimens适配方案。

总的来说,想把x2c框架引入到现有的项目当中,针对当前的UI布局做性能优化,可用性并不高,甚至需要对框架代码进行修改,这其中的工作量,也是不小的。

关于Android UI 优化的更多相关文章

  1. 优化技术之Android UI优化

    2013-06-30 UI 优化 在Android中,最常用LinearLayout表示UI的布局.比起LinearLayout,在资源利用上,RelativeLayout会占用更少的资源而达到相同的 ...

  2. Android UI优化——include、merge 、ViewStub

    在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...

  3. Android UI 优化 使用<include/>和 <merge />标签

    使用<include /> 标签来重用layout代码 如果在一个项目中需要用到相同的布局设计,可以通过<include /> 标签来重用layout代码,该标签在Androi ...

  4. Android UI 优化——使用HierarchyViewer工具

    先说些题外话,希望路过的各位支持,博主有幸成为2013年度博客之星的候选人,期待你的一票,谢谢. 投票猛击: http://vote.blog.csdn.net/blogstaritem/blogst ...

  5. Android学习笔记_52_全面了解Android开发规范:性能及UI优化

    一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能 ...

  6. Android 程序优化总结

    第一部分 编程规范 1.1 基本要求: 程序结构清晰,简单易懂,单个函数的程序行数不得超过100行. 打算干什么,要简单,直接. 尽量使用标准库函数和公共函数 不要随意定义全局变量,尽量使用局部变量. ...

  7. Android UI性能优化实战, 识别View中的性能问题

    出自:[张鸿洋的博客]来源:http://blog.csdn.net/lmj623565791/article/details/45556391 1.概述 2015年初google发布了Android ...

  8. Android开发中内存和UI优化

    1.内存||效率 GC这东西对于开发人员用起来比较爽,但对于技术总监或产品总监来说,他们并不在乎,在乎的是用户运行App的流畅度,待你开发完了,笑眯眯的走过来,让你测试N个适配器,烦都烦死你. 说到这 ...

  9. Android UI性能优化实战 识别绘制中的性能问题

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45556391: 本文出自:[张鸿洋的博客] 1.概述 2015年初google ...

随机推荐

  1. python如何安装cv2

    使用pip3 安装cv2包的时候报错 PS C:\Users\lenovo> pip3 install cv2 Collecting cv2 Could not find a version t ...

  2. Redis Sentinel实现高可用配置

    一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...

  3. eclipse的常用设置(空间新建后需要的配置)

    地址:https://blog.csdn.net/qiaorui_/article/details/78424491 说明:              新下载的eclipse或者新建了一个工作空间,之 ...

  4. Linux查看密码

    Linux的账号是记录在/etc/passwd文件里面,密码则是保存在/etc/shadow 1.在如下图输入head -3 /etc/passwd可以看查前三密码,回车这后就可以看到前三行的密码保存 ...

  5. 记一次使用getRequestDispatcher遇到的坑。。响应页面出现新建下载任务

    getRequestDispatcher RequestDispatcher接口提供将请求转发送到另一个资源的功能,它可能是html,servlet或jsp等. 此接口也可用于包括另一资源的内容.它是 ...

  6. Anatomy of a Database System学习笔记 - 存储管理

    使用裸设备,还是使用文件系统?   描述 pros cons 裸设备 顺序读磁盘快比随机要快10-100倍,DB比OS更懂磁盘负载,因此很多DB是直接管理数据块如何存放的. DB对裸设备的管理,比文件 ...

  7. java序列化和反序列化中的serialVersionUID有啥用

     1.什么是序列化和反序列化 序列化就是将java对象转成字节序列的过程:反序列化就是将字节序列转成java对象的过程. java中,序列化的目的一种是需要将对象保存到硬盘上,一种是对象需要在网络中传 ...

  8. NGINX轻松管理10万长连接

    先说说服务为什么使用HTTPs长连接技术?有如下几个原因:对响应时间要求较高:服务走的是公网,客户端与服务端的TCP建立的三次握手和断开的四次握手都需要40ms左右(真实数据包计算出来的),共需要80 ...

  9. oss对象云存储

    import qiniu import uuidimport config def qn_upload_voice(fileData): '''上传语音到七牛云 @arg: fileData - 编码 ...

  10. V-REP与C++初步通信测试

    打开vrep,在上方操作栏找到help选项打开,选择help topics.此时浏览器打开了vrep的操作手册user manual. 在user manual左侧目录中找到writing code ...