之前项目为了同时兼容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. Flask即插视图与tornado比较

    由于公司使用了Tornado框架和Flask框架,之前一直使用的都是Flask框架,已经对url下面紧跟着视图的写法很固执.刚开始接触Tornado框架,对于其url和视图分开的写法思想上无法转变.今 ...

  2. H5-meta标签使用大全

    meta标签有下面的作用:搜索引擎优化(提高搜索性能),控制页面功能化. meta标签的组成:meta标签共有两个属性,它们分别是http-equiv属性和name属性. 1.name属性 name属 ...

  3. linux 文件描述符

    文件描述符是什么?和文件句柄有啥区别?文件描述符是linux/unix操作系统中特有的概念.相当于windows系统中的文件句柄.一个意思不同叫法.Linux系统中, 每当进程打开一个文件时,系统就为 ...

  4. matlab-画个拱桥和倒影?

    matlab可用于各行各业的应用中,现在我们就简单画一个拱桥试一试. r=input('请输入半径: '); z=input('请输入弧度: '); figure() %r=4; %画拱洞,用李萨如图 ...

  5. 5.1HTML+CSS制作一颗流星

    效果地址:https://codepen.io/flyingliao/pen/QPKQjB?editors=1100 效果图: HTML code: <div class="sky&q ...

  6. C#C/S框架演示 (MES系统)

    之前做过一个MES系统,发一些里面的截图.如果有朋友也用这个框架.或者有兴趣可以一起学习学习.使用开发工具VS2013,数据库SqlServer2008和Oracle11C.插件dev15.2,开发模 ...

  7. apache_php_mysql

    软件下载 目前,Apache和PHP均未出现官方的64位版本. Apache 64位: http://www.blackdot.be/?inc=apache/binaries 这个安装文件我已经上传到 ...

  8. python docker 多进程提供 稳定tensorflow gpu 线上服务

    尝试了太多的python多进程的服务,在tensorflow 的线上GPU服务中总是不理想.tensorlfow serving docker服务这些也有些不便. 今天抽空给大家分享一个成功的经验.失 ...

  9. Java好的的工具类:JSONResult

    package com.nxhfzx.gdshopping.entity; import java.util.List; import com.fasterxml.jackson.databind.J ...

  10. linux下redis的安装方法

    一.Linux环境下安装Redis   Redis的官方下载网址是:http://redis.io/download  (这里下载的是Linux版的Redis源码包) Redis服务器端的默认端口是6 ...