安卓编程技巧总结(1) 资源与UI布局处理


资源

RES资源里最应该优化的就是图片了,可以减少安装包大小,可以降低app内存消耗等,一般的优化如下:

  1. png压缩
如果是png,且图片过大,建议使用Tinypng进行压缩。
TinyPng使用智能的有损压缩算法,通过减少图片的颜色,从而在几乎不影响视觉的情况下,显著的减少图片的体积。
例如:一个2M的图片可以压缩到200K,甚至更小,且不影响视觉效果。

具体可参考:
http://blog.csdn.net/fuchaosz/article/details/51829662

  1. 不同drawable目录适配方案1
为了支持多种屏幕尺寸和密度,Android 为多种屏幕提供不同的资源目录进行适配。
为不同屏幕密度提供不同的位图可绘制对象,可用于密度特定资源的配置限定符,
包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超
超高)和 xxxhdpi(超超超高)。
根据当前的设备屏幕尺寸和密度,将会寻找最匹配的资源,如果将高分辨率图片放
入低密度目录,将会造成低端机加载过大图片资源,又可能造成 OOM,同时也是资
源浪费,没有必要在低端机使用大图。

3.不同drawable目录适配方案2

如果资源图片体积不大,目标手机最低版本设置较高,如大于4.4等,也可以选择只放置一种drawable图片,如xxxhdpi,
这样可以带来的好处就是:减少安装包大小,同时美术人员工作也轻松一些;
带来的问题:低端手机在对应的drawable目录下找不到对应的图片,会使用其他drawable中的图片,
加载到内存并压缩使用,也就是在低端手机上增加了额外的内存开销,要小心OOM。

4.大图处理

对于一些特大的图,如果不是启动APP必须使用的图片,也可以放在服务器端,
根据需要下载并缓存使用,可减少压缩包大小。
  1. 颜色
与图片相比,我们更应该考虑使用纯色、渐变色、shape等来实现想要的效果。

布局

1.布局嵌套

布局中不得不使用 ViewGroup 多重嵌套时,不要使用 LinearLayout 嵌套,
改用 RelativeLayout,通过其相对属性进行合理控制,可以有效降低嵌套数。

Android 应用页面上任何一个 View 都需要经过 measure、layout、draw 三个步骤
才能被正确的渲染。
从 xml layout 的顶部节点开始进行 measure,每个子节点都需
要向自己的父节点提供自己的尺寸来决定展示的位置,在此过程中可能还会重新
measure(由此可能导致 measure 的时间消耗为原来的 2-3 倍)。
节点所处位置越深,套嵌带来的 measure 越多,计算就会越费时。
这就是为什么扁平的 View 结构会性能更好。
理想情况下,总共的 measure,layout,draw 时间应该被很好的控制在 16ms以内,以保证滑动屏幕时 UI 的流畅。

要找到那些多余的 View(增加渲染延迟的 view),可以用 Android Studio Monitor
里的 Hierarachy Viewer 工具,可视化的查看所有的 view。

2.过渡绘制

禁止在设计布局时多次设置子 view 和父 view 中为同样的背景造成页面过
度绘制,推荐将不需要显示的布局进行及时隐藏。

例如:父View加载背景色,子View与其色一致,不需要再为子View设置背景色;
  1. 灵活使用
灵活使用布局,推荐 Merge、ViewStub 来优化布局,尽可能多的减少 UI
布局层级,推荐使用 FrameLayout,LinearLayout、RelativeLayout 次之
  1. 防止父View频繁刷新
在需要时刻刷新某一区域的组件时,建议通过以下方式避免引发全局 layout
刷新:
1)  设置固定的 view 大小的高宽,如倒计时组件等;
2)  调用 view 的 layout 方式修改位置,如弹幕组件等;
3)  通过修改 canvas 位置并且调用 invalidate(int l, int t, int r, int b)等方式限定刷新
区域;
4)  通过设置一个是否允许 requestLayout 的变量,然后重写控件的 requestlayout、
onSizeChanged 方法 , 判 断 控 件 的大小 没 有 改 变 的 情况下 , 当 进 入
requestLayout 的时候,直接返回而不调用 super 的 requestLayout 方法。

请参考自定义控件相关的文章;
  1. ScrollView 嵌套禁忌
不能使用 ScrollView 包裹 ListView/GridView/ExpandableListVIew;因为这
样会把 ListView 的所有 Item 都加载到内存中,要消耗巨大的内存和 cpu 去绘制图
面。
说明:
ScrollView 中嵌套 List 或 RecyclerView 的做法官方明确禁止。除了开发过程中遇到
的各种视觉和交互问题,这种做法对性能也有较大损耗。ListView 等 UI 组件自身有
垂直滚动功能,也没有必要在嵌套一层 ScrollView。目前为了较好的 UI 体验,更贴
近 Material Design 的设计,推荐使用 NestedScrollView。
  1. 编码格式
源文件统一采用 UTF-8 的形式进行编码。
例如:
<?xml version="1.0" encoding="utf-8"?>

第一篇: 安卓编程技巧总结(1) 资源与UI布局处理

//www.greatytc.com/p/ff97b15d5c9d

第二篇: 安卓编程技巧总结(2) 基础组件开发

//www.greatytc.com/p/b05752377887

第三篇:安卓编程技巧总结(3) 进程与线程处理

//www.greatytc.com/p/7d05c8a368bd

第四篇:安卓编程技巧总结(4) 数据文件处理

//www.greatytc.com/p/0515df3b697d

第五篇:安卓编程技巧总结(5) 图片处理

//www.greatytc.com/p/76690b2ba310

第六篇:安卓编程技巧总结(6) APP安全分析

//www.greatytc.com/p/4347ff392122

第七篇:安卓编程技巧总结(7) 性能检测代码分析

//www.greatytc.com/p/687f3c641408

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容