2021-01-20(性能優(yōu)化之概念篇)

計(jì)算性能優(yōu)化參考

  1. 低效率函數(shù)

第1種是相對(duì)執(zhí)行時(shí)間長(zhǎng)的方法专肪,我們可以很輕松的找到這些方法并做一定的優(yōu)化根盒。第2種是執(zhí)行時(shí)間短,但是執(zhí)行頻次很高的方法,因?yàn)閳?zhí)行次數(shù)多饲宛,累積效應(yīng)下就會(huì)對(duì)性能產(chǎn)生很大的影響

  1. 計(jì)算性能優(yōu)化

(1). 批處理與緩存
(2). 異步操作
(3). 容器性能
(4). 數(shù)據(jù)結(jié)構(gòu)

電量?jī)?yōu)化

  1. 電量消耗分析:

Battery Historian(電量使用記錄分析工具)

  1. 電量?jī)?yōu)化的一些建議:
  1. 充電時(shí)執(zhí)行任務(wù)
  2. 連接wifi后執(zhí)行任務(wù)
  3. wake_lock
  4. 大量高頻次的CPU喚醒及操作集中處理
  5. 定位
  6. 網(wǎng)絡(luò)優(yōu)化

網(wǎng)絡(luò)優(yōu)化

  1. 網(wǎng)絡(luò)分析工具

Network Monitor(網(wǎng)絡(luò)監(jiān)控工具)
代理工具(Fiddler),分析網(wǎng)絡(luò)請(qǐng)求
模擬弱網(wǎng)(使用Fiddler)

  1. 網(wǎng)絡(luò)優(yōu)化方案

(一)任務(wù)集中處理(使用JobScheduler)
(二)傳輸數(shù)據(jù)優(yōu)化

  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; // 無(wú)法知道壓縮后的數(shù)據(jù)大小
                }

                @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择份,F(xiàn)latBuffer來(lái)減小序列化的數(shù)據(jù)的大小

  1. 緩存
  2. 圖片壓縮

(三)不同網(wǎng)絡(luò)狀況蘸嘶,處理不同的任務(wù)

(四)弱網(wǎng)情況下我們應(yīng)該做些什么?
(1).壓縮/減少數(shù)據(jù)傳輸量
(2).利用緩存減少網(wǎng)絡(luò)傳輸
(3).針對(duì)弱網(wǎng)(移動(dòng)網(wǎng)絡(luò)), 不自動(dòng)加載圖片
(4).界面先反饋, 請(qǐng)求延遲提交****

數(shù)據(jù)傳輸優(yōu)化

序列化计雌、反序列化傳輸

  1. Parcelable相對(duì)于Serializable效率要高
  2. GSON處理序列化問(wèn)題悄晃,速度更快

可優(yōu)化的數(shù)據(jù)序列化方案:

Protocal Buffers:強(qiáng)大,靈活凿滤,但是對(duì)內(nèi)存的消耗會(huì)比較大妈橄,并不是移動(dòng)終端上的最佳選擇。
Nano-Proto-Buffers:基于Protocal翁脆,為移動(dòng)終端做了特殊的優(yōu)化眷蚓,代碼執(zhí)行效率更高,內(nèi)存使用效率更佳反番。
FlatBuffers:這個(gè)開(kāi)源庫(kù)最開(kāi)始是由Google研發(fā)的沙热,專(zhuān)注于提供更優(yōu)秀的性能。

啟動(dòng)優(yōu)化

  1. APP的啟動(dòng)方式:

(1). 冷啟動(dòng)(應(yīng)用從桌面上啟動(dòng)罢缸,且后臺(tái)沒(méi)有進(jìn)程的緩存篙贸,這是系統(tǒng)就需要新創(chuàng)建一個(gè)進(jìn)程并且分配資源。)
(2). 熱啟動(dòng) (app在后臺(tái)有進(jìn)程緩存)

  1. 查看啟動(dòng)過(guò)程消耗時(shí)間的工具
  1. Loacat輸出的display time
  2. Traceview
  3. adb shell
  1. 啟動(dòng)優(yōu)化方案

流程中很多步驟是系統(tǒng)控制的枫疆,我們能夠控制的和關(guān)注的點(diǎn)有以下幾個(gè):
(1).Application的onCreate,一般應(yīng)用中通用主件和初始化都放在這里(耗時(shí)主因)
(2).Activity的onCreate爵川,UI布局和渲染(耗時(shí)主因)
(3).顯示啟動(dòng)窗口到窗口替換之間,會(huì)出現(xiàn)白屏的過(guò)度畫(huà)面养铸,體驗(yàn)太差(視主題而定雁芙,必須優(yōu)化)

**(1).Application中初始化優(yōu)化的方案有兩種**
  • 不需要立刻初始化的,延遲加載
  • 需要初始化的钞螟,開(kāi)啟線(xiàn)程初始化
**(2).Activity的onCreate中優(yōu)化**
  • 優(yōu)化布局耗時(shí):一個(gè)布局層級(jí)越深兔甘,里面包含需要加載的元素越多,就會(huì)耗費(fèi)更多的初始化時(shí)間鳞滨。關(guān)于布局性能的優(yōu)化洞焙,在渲染優(yōu)化的文章中已經(jīng)講過(guò)。
  • 異步延遲加載:一開(kāi)始只初始化最需要的布局,異步加載圖片澡匪,非立即需要的組件可以做延遲加載熔任。
  • 預(yù)加載:在前一個(gè)顯示時(shí)預(yù)加載下一個(gè)顯示頁(yè)面中需要用到的數(shù)據(jù)(常常用到Spalsh調(diào)整主頁(yè)面時(shí)使用)

包體優(yōu)化

  1. 清理無(wú)用資源

(1).使用Refactor->Remove unused Resource
(2).使用Lint工具
(3).開(kāi)啟shrinkResources去除無(wú)用資源
(4).刪除無(wú)用的語(yǔ)言資源
(5).清理第三方庫(kù)中冗余代碼

  1. 圖片資源優(yōu)化

(1)使用壓縮過(guò)的圖片
(2)只用一套圖片
(3)使用不帶alpha值的jpg圖片
(4)使用tinypng有損壓縮
(5)使用webp格式
(6)使用svg
(7)使用shape
(8)使用著色方案
(9)對(duì)打包后的圖片進(jìn)行壓縮

  1. 資源動(dòng)態(tài)加載

(1)在線(xiàn)化素材庫(kù)
(2)動(dòng)態(tài)加載皮膚
(3)插件化

  1. lib庫(kù)優(yōu)化

    只提供對(duì)主流架構(gòu)的支持,比如arm唁情,對(duì)于mips和x86架構(gòu)可以考慮不支 持疑苔,這樣可以大大減小APK的體積.

  2. 7zip壓縮資源

    對(duì)于assets或者raw文件夾中的資源,可以使用7zip壓縮甸鸟,使用時(shí)進(jìn)行解壓惦费。

  3. 代碼混淆

  4. 資源混淆

資源混淆簡(jiǎn)單來(lái)說(shuō)希望實(shí)現(xiàn)將res/drawable/icon,png變成res/drawable/a.png,或我們甚至可以將文件路徑也同時(shí)混淆,改成r/s/a.png抢韭。
建議使用微信的AndResGuard

  1. 使用微信AndResGuard
  2. Facebook的redex優(yōu)化字節(jié)碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薪贫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子刻恭,更是在濱河造成了極大的恐慌瞧省,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳍贾,死亡現(xiàn)場(chǎng)離奇詭異鞍匾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贾漏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)候学,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人纵散,你說(shuō)我怎么就攤上這事梳码。” “怎么了伍掀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵掰茶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蜜笤,道長(zhǎng)濒蒋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任把兔,我火速辦了婚禮沪伙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘县好。我一直安慰自己围橡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布缕贡。 她就那樣靜靜地躺著翁授,像睡著了一般拣播。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上收擦,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天贮配,我揣著相機(jī)與錄音,去河邊找鬼塞赂。 笑死泪勒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的减途。 我是一名探鬼主播酣藻,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鳍置!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起送淆,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤税产,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后偷崩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辟拷,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年阐斜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衫冻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谒出,死狀恐怖隅俘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笤喳,我是刑警寧澤为居,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站杀狡,受9級(jí)特大地震影響蒙畴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呜象,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一膳凝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恭陡,春花似錦蹬音、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)楼入。三九已至,卻和暖如春牧抽,著一層夾襖步出監(jiān)牢的瞬間嘉熊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工扬舒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阐肤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓讲坎,卻偏偏與公主長(zhǎng)得像孕惜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晨炕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容