Android优化方向

本着针对面试,不负责任的态度,写下《面试总结》系列。本系列记录面试过程中各个知识点,而不是入门系列,如果有不懂的自行学习。

不负责任系列

内存泄露

  1. 什么是内存泄露,为什么会引发
  2. Android垃圾回收机制

频繁GC

耗电问题

OOM问题

原因

  1. UI线程做轻微耗时操作,导致UI线程卡顿
  2. 布局layout过于复杂,无法在16ms内完成渲染
  3. 同一时间段内执行动画过多,导致cpu或gpu负载过重
  4. 复杂的布局,频繁触发measure,layout,导致整个view从新渲染
  5. 内存频繁gc
  6. 冗余资源及逻辑导致加载缓慢
  7. 工作线程设置位background,导致后台线程抢占UI线程,阻塞渲染操作
  8. 排查静态变量

手段

  1. gpu过渡重绘,开发者选项打开显示重绘区域,定位到过去,解布局
  2. 打开严格模式,解决主线程耗时的操作,读写文件等
  3. traceView,检查可能是ui线程操作的耗时问题,view的measure、layout是不是耗时过多
  4. leakcanary
  5. forloop/ondraw
  6. 优化gson的序列化、反序列化,使用流配合gson序列化、提高性能20%
  7. viewstub、merge
  8. 加载优化
    a. 分步加载
    b. 异步加载
    c. 延时加载
  9. 刷新优化
    a. 缩小刷新区域
    b. 减少刷新次数
  10. 动画优化、硬件加速
  11. 耗电优化、batteryhistorian

性能优化最佳实践

1.布局优化
优化细节
  1. 如果父控件有颜色,也是自己需要的颜色,那么就不必在子控件加背景颜色
  2. 如果每个自控件的颜色不太一样,而且可以完全覆盖父控件,那么就不需要再父控
    件上加背景颜色
  3. 尽量减少不必要的嵌套
  4. 能用LinearLayout和FrameLayout,就不要用RelativeLayout,因为RelativeLayout控
    件相对比较复杂,测绘也想要耗时。
优化细节
  1. 使用include和merge增加复用,减少层级
  2. ViewStub 按需加载,更加轻便
优化细节
  1. 复杂界面可选择ConstraintLayout,可有效减少层级
2.绘制优化
优化细节
  1. onDraw 中不要创建新的局部对象
  2. onDraw 方法中不要做耗时的任务
3.内存优化

基本可以分为以下四大类: 1、集合类 泄漏 2、单例/静态变量造成的内存泄漏 3、匿名内部类/非静态内部类 4、资源 未关闭造成的内存泄漏

优化细节
  1. 集合类泄漏
  2. 单例/静态变量造成的内存泄漏
  3. 匿名内部类/非静态内部类
  4. 资源未关闭造成的内存泄漏
优化细节
  1. 解决各个情况下的内存泄漏,注意平时代码的规范。
4.启动优化

官方给建议是: 1、利用提前展示出来的 Window,快速展示出来一个界 面,给用户快速反馈的体验; 2、避免在启动时做密集沉重的初始化(Heavy app initialization); 3、避免 I/O 操作、反序列化、网络操作、布局嵌套等。

  1. 利用提前展示出来的 Window,快速展示出来一个界面
  2. 避免在启动时做密集沉重的初始化
  3. 避免 I/O 操作、反序列化、网络操作、布局嵌套等。
优化细节
  1. 利用提前展示出来的Window,快速展示出来一个界面,给用户快速反馈的体验;
  2. 避免在启动时做密集沉重的初始化(Heavy app initialization);
  3. 避免I/O操作、反序列化、网络操作、布局嵌套等。
5.包体积优化

assets 文件夹 存放一些配置文件、资源文件,assets 不会自动生成对应的 ID, 而是通过 AssetManager 类的接口获取。
res目录 res 是 resource 的缩写,这个目录存放资源文件,会自动生成对应的 ID 并映射到 .R 文件中,访问直接使用资源 ID。
META-INF 保存应用的签名信息,签名信息可以验证 APK 文件的完整性。 AndroidManifest.xml 这个文件用来描述 Android 应用的配置信息,一些组件的
注册信息、可使用权限等。
classes.dex Dalvik 字节码程序,让 Dalvik 虚拟机可执行,一般情况下,Android 应 用在打包时通过 Android SDK 中的 dx 工具将 Java 字节码转换为 Dalvik 字节 码。
resources.arsc 记录着资源文件和资源 ID 之间的映射关系,用来根据资源 ID 寻找资源。

  1. lint工具,减小无用资源,同时build文件中开启资源压缩
  2. xml,drawable单色图像
  3. 重用资源
  4. 压缩png、jpg等图像
  5. 使用webp
  6. 使用矢量图
  7. 代码混淆、proguard工具
  8. 插件化
优化细节
  1. 代码混淆
  2. 插件化
  3. 资源优化
6.耗电优化
优化细节
  1. 使用JobScheduler调度任务
  2. 使用懒惰法则(减小、退出、合并)
7.ListView 和 Bitmap 优化
  1. 图片质量压缩
  2. 图片尺寸压缩
  3. libjpeg.so压缩
优化细节
  1. ListView 使用 ViewHolder,分段,分页加载
  2. 压缩Bitmap
8.响应速度优化
9.线程优化
10.未优化

编写高效代码有两个基本规则: 1、不要做你不需要做的工作 2、如果可以避免,请不要分配内存

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

推荐阅读更多精彩内容

  • Android的性能优化,主要是从以下几个方面进行优化的: 稳定(内存溢出、崩溃) 流畅(卡顿) 耗损(耗电、流量...
    Android_冯星阅读 11,929评论 4 101
  • 什么是性能 快,稳,省,小,这四点很形象的代表了性能的四个方面,同时也让我们知道我们App现在是否是款性能良好的A...
    Gary同学阅读 575评论 0 0
  • 本文由玉刚说写作平台提供写作赞助,版权归玉刚说微信公众号所有原作者:Mr.s(猪_队友)版权声明:未经玉刚说许可,...
    猪_队友阅读 3,194评论 1 22
  • 1、布局优化 <1> 尽量减少不必要的嵌套 <2> 简单布局使用LinearLayout和FrameLayout ...
    墨池又雨阅读 1,610评论 1 30
  • 前述 一个好的app除了有吸引人的功能, 美丽的交互之外,性能也至关重要,作为一个技术人员,在这里当然只能讲技术了...
    唐小鹏阅读 2,439评论 0 23