2021-01-20(性能优化之概念篇)

计算性能优化参考

  1. 低效率函数

第1种是相对执行时间长的方法,我们可以很轻松的找到这些方法并做一定的优化。第2种是执行时间短,但是执行频次很高的方法,因为执行次数多,累积效应下就会对性能产生很大的影响

  1. 计算性能优化

(1). 批处理与缓存
(2). 异步操作
(3). 容器性能
(4). 数据结构

电量优化

  1. 电量消耗分析:

Battery Historian(电量使用记录分析工具)

  1. 电量优化的一些建议:
  1. 充电时执行任务
  2. 连接wifi后执行任务
  3. wake_lock
  4. 大量高频次的CPU唤醒及操作集中处理
  5. 定位
  6. 网络优化

网络优化

  1. 网络分析工具

Network Monitor(网络监控工具)
代理工具(Fiddler),分析网络请求
模拟弱网(使用Fiddler)

  1. 网络优化方案

(一)任务集中处理(使用JobScheduler)
(二)传输数据优化

  1. gzip压缩
    static class GzipRequestInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            okhttp3.Request originalRequest = chain.request();
            if (originalRequest.body() == null || originalRequest.header("Content-Encoding") != null) {
                return chain.proceed(originalRequest);
            }

            okhttp3.Request compressedRequest = originalRequest.newBuilder()
                    .header("Content-Encoding", "gzip")
                    .method(originalRequest.method(), gzip(originalRequest.body()))
                    .build();
            return chain.proceed(compressedRequest);
        }

        private RequestBody gzip(final okhttp3.RequestBody body) {
            return new RequestBody() {
                @Override
                public MediaType contentType() {
                    return body.contentType();
                }

                @Override
                public long contentLength() {
                    return -1; // 无法知道压缩后的数据大小
                }

                @Override
                public void writeTo(BufferedSink sink) throws IOException {
                    BufferedSink gzipSink = Okio.buffer(new GzipSink(sink));
                    body.writeTo(gzipSink);
                    gzipSink.close();
                }
            };
        }
    }

> > 2. 代替JSON(使用Protocal Buffers,Nano-Proto-Buffers,FlatBuffer来减小序列化的数据的大小

  1. 缓存
  2. 图片压缩

(三)不同网络状况,处理不同的任务

(四)弱网情况下我们应该做些什么?
(1).压缩/减少数据传输量
(2).利用缓存减少网络传输
(3).针对弱网(移动网络), 不自动加载图片
(4).界面先反馈, 请求延迟提交****

数据传输优化

序列化、反序列化传输

  1. Parcelable相对于Serializable效率要高
  2. GSON处理序列化问题,速度更快

可优化的数据序列化方案:

Protocal Buffers:强大,灵活,但是对内存的消耗会比较大,并不是移动终端上的最佳选择。
Nano-Proto-Buffers:基于Protocal,为移动终端做了特殊的优化,代码执行效率更高,内存使用效率更佳。
FlatBuffers:这个开源库最开始是由Google研发的,专注于提供更优秀的性能。

启动优化

  1. APP的启动方式:

(1). 冷启动(应用从桌面上启动,且后台没有进程的缓存,这是系统就需要新创建一个进程并且分配资源。)
(2). 热启动 (app在后台有进程缓存)

  1. 查看启动过程消耗时间的工具
  1. Loacat输出的display time
  2. Traceview
  3. adb shell
  1. 启动优化方案

流程中很多步骤是系统控制的,我们能够控制的和关注的点有以下几个:
(1).Application的onCreate,一般应用中通用主件和初始化都放在这里(耗时主因)
(2).Activity的onCreate,UI布局和渲染(耗时主因)
(3).显示启动窗口到窗口替换之间,会出现白屏的过度画面,体验太差(视主题而定,必须优化)

**(1).Application中初始化优化的方案有两种**
  • 不需要立刻初始化的,延迟加载
  • 需要初始化的,开启线程初始化
**(2).Activity的onCreate中优化**
  • 优化布局耗时:一个布局层级越深,里面包含需要加载的元素越多,就会耗费更多的初始化时间。关于布局性能的优化,在渲染优化的文章中已经讲过。
  • 异步延迟加载:一开始只初始化最需要的布局,异步加载图片,非立即需要的组件可以做延迟加载。
  • 预加载:在前一个显示时预加载下一个显示页面中需要用到的数据(常常用到Spalsh调整主页面时使用)

包体优化

  1. 清理无用资源

(1).使用Refactor->Remove unused Resource
(2).使用Lint工具
(3).开启shrinkResources去除无用资源
(4).删除无用的语言资源
(5).清理第三方库中冗余代码

  1. 图片资源优化

(1)使用压缩过的图片
(2)只用一套图片
(3)使用不带alpha值的jpg图片
(4)使用tinypng有损压缩
(5)使用webp格式
(6)使用svg
(7)使用shape
(8)使用着色方案
(9)对打包后的图片进行压缩

  1. 资源动态加载

(1)在线化素材库
(2)动态加载皮肤
(3)插件化

  1. lib库优化

    只提供对主流架构的支持,比如arm,对于mips和x86架构可以考虑不支 持,这样可以大大减小APK的体积.

  2. 7zip压缩资源

    对于assets或者raw文件夹中的资源,可以使用7zip压缩,使用时进行解压。

  3. 代码混淆

  4. 资源混淆

资源混淆简单来说希望实现将res/drawable/icon,png变成res/drawable/a.png,或我们甚至可以将文件路径也同时混淆,改成r/s/a.png。
建议使用微信的AndResGuard

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

推荐阅读更多精彩内容