关于Android UI 优化
之前项目为了同时兼容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 优化的更多相关文章
- 优化技术之Android UI优化
2013-06-30 UI 优化 在Android中,最常用LinearLayout表示UI的布局.比起LinearLayout,在资源利用上,RelativeLayout会占用更少的资源而达到相同的 ...
- Android UI优化——include、merge 、ViewStub
在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...
- Android UI 优化 使用<include/>和 <merge />标签
使用<include /> 标签来重用layout代码 如果在一个项目中需要用到相同的布局设计,可以通过<include /> 标签来重用layout代码,该标签在Androi ...
- Android UI 优化——使用HierarchyViewer工具
先说些题外话,希望路过的各位支持,博主有幸成为2013年度博客之星的候选人,期待你的一票,谢谢. 投票猛击: http://vote.blog.csdn.net/blogstaritem/blogst ...
- Android学习笔记_52_全面了解Android开发规范:性能及UI优化
一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能 ...
- Android 程序优化总结
第一部分 编程规范 1.1 基本要求: 程序结构清晰,简单易懂,单个函数的程序行数不得超过100行. 打算干什么,要简单,直接. 尽量使用标准库函数和公共函数 不要随意定义全局变量,尽量使用局部变量. ...
- Android UI性能优化实战, 识别View中的性能问题
出自:[张鸿洋的博客]来源:http://blog.csdn.net/lmj623565791/article/details/45556391 1.概述 2015年初google发布了Android ...
- Android开发中内存和UI优化
1.内存||效率 GC这东西对于开发人员用起来比较爽,但对于技术总监或产品总监来说,他们并不在乎,在乎的是用户运行App的流畅度,待你开发完了,笑眯眯的走过来,让你测试N个适配器,烦都烦死你. 说到这 ...
- Android UI性能优化实战 识别绘制中的性能问题
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45556391: 本文出自:[张鸿洋的博客] 1.概述 2015年初google ...
随机推荐
- mpvue
使用mpvue开发小程序 首先安装 我们使用@vue/cli 无法使用vue init 可以全局安装一个@vue/cli-init npm install -g @vue/cli-init 然后初始化 ...
- Windows环境下在sublime text3配置C编译环境
1. 检查本机有没有安装GCC,没有的话先进行安装 2. 选择 sublime 的Tools->Build System->New Build System,建立配置文件,文件命名为C.s ...
- 手写实现ArrayList & LinkedList
微信公众号:程序媛的非程序人生 关注可了解更多资讯.问题或建议,请公众号留言; 1.手写实现ArrayList 2.手写实现 LinkedList 3.LinkedList的数据结 ...
- uva-507
题意:连续序列和最大,直接枚举..... 代码跑了2.4s.QAQ #include <string> #include<iostream> #include<map&g ...
- sbt 学习
一.基础 1.工程根目录 包含build.sbt的目录是工程的根目录.注意,就算在一个空目录下面执行sbt about,也会生成project文件夹 2.源文件目录结构 SBT有固定的文件组织结构 s ...
- C#C/S框架演示 (MES系统)
之前做过一个MES系统,发一些里面的截图.如果有朋友也用这个框架.或者有兴趣可以一起学习学习.使用开发工具VS2013,数据库SqlServer2008和Oracle11C.插件dev15.2,开发模 ...
- 系统设计与架构笔记:ETL工具开发和设计的建议
最近项目组里想做一个ETL数据抽取工具,这是一个研发项目,但是感觉公司并不是特别重视,不重视不是代表它不重要,而是可能不会对这个项目要求太高,能满足我们公司的小需求就行,想从这个项目里衍生出更多的东西 ...
- java面试题复习(五)
41.阐述final.finally.finalize的区别 final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract ...
- python大法好——ython GUI编程(Tkinter)
Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...
- Spring-内置Resouce
Spring 内置Resouce Resource: org.springframework.core.io.Resource; 内置方法 public interface Resource exte ...