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

activity 的優(yōu)化算是一個(gè)重點(diǎn)吧聚唐,activity 的啟動(dòng)本來(lái)就是挺耗時(shí)的丐重,我們需要優(yōu)化的是那種啟動(dòng)極其耗時(shí)的,比如啟動(dòng)新 activity 杆查,會(huì)讓用戶看 1秒多的黑屏扮惦,這就不好的了,可能不是所有的朋友的會(huì)碰到這個(gè)問(wèn)題亲桦,產(chǎn)生這樣的 activity 原因時(shí)多種多樣的崖蜜,根本原因則是:

  • 上個(gè)頁(yè)面的 handle 任務(wù)沒(méi)有銷毀
  • activity 啟動(dòng)中有大量非系統(tǒng)耗時(shí)任務(wù)
  • activity xml 布局非常復(fù)雜,渲染界面很耗時(shí)

不管大家寫的怎么樣客峭,基本就是這幾個(gè)原因會(huì)造成 activity 啟動(dòng)慢

我們先來(lái)看看一個(gè)經(jīng)典的圖豫领,activity 和 view 的渲染過(guò)程

1785445-e0c8e7b1b09bb068.png

新界面啟動(dòng),先執(zhí)行 activity 3個(gè)初始化生命周期函數(shù)舔琅,執(zhí)行完之后才會(huì)對(duì)界面元素 view 執(zhí)行測(cè)量等恐,繪制,渲染备蚓,這時(shí)我們才能看到實(shí)際界面內(nèi)容课蔬,然后還會(huì)執(zhí)行 activity 啟動(dòng)動(dòng)畫(huà)

上面的任何任務(wù)卡頓都會(huì)造成,我們延遲看到頁(yè)面

解決思路

1. handle 問(wèn)題

對(duì)于handle 問(wèn)題郊尝,我們可以用 StallBuster 工具查看頁(yè)面啟動(dòng)時(shí) handle 系統(tǒng)任務(wù)棧的情況购笆,比如下圖就是 handle 任務(wù)沒(méi)有清空,影響下個(gè)頁(yè)面啟動(dòng)

device-2018-11-09-165953.png

所以我們?cè)陧?yè)面關(guān)閉或是不顯示時(shí)虚循,該關(guān)的一定要關(guān)

2. xml 布局效率

xml 布局層級(jí)一定要精簡(jiǎn)同欠,要不真的非常耗時(shí)的,我碰到過(guò)自己寫的 xml 耗時(shí) 1秒多的 ~

這里我們可以用 Hierarchy Viewer 工具 查看 xml 布局效率横缔,用 ConstraintLayout 約束布局 來(lái)減少xml 層級(jí)铺遂,遵照Android UI性能優(yōu)化實(shí)戰(zhàn) 的思路,去掉不必需要的背景茎刚,減少過(guò)度繪制

3. 延遲操作

activity 的 oncreate 我們一箱習(xí)慣寫各種初始化操作的襟锐,但是很多時(shí)候這里面就有耗時(shí)操作,所有我們可以 activity 頁(yè)面渲染完畢再去做這些初始化操作及其后面的獲取數(shù)據(jù)的操作

activity 的延遲操作有2個(gè)思路:

private Handler myHandler = new Handler();
    private Runnable mLoadingRunnable = new Runnable() {
        @Override
        public void run() {
            updateText(); //更新UI線程
        }
    };
getWindow().getDecorView().post(new Runnable() {
          @Override
          public void run() {
              myHandler.post(mLoadingRunnable);
          }
      });

這2種寫法有區(qū)別嗎膛锭,有粮坞,而且很大蚊荣。系統(tǒng) UI 線程的所有操作都是通過(guò)在 handle 里面添加任務(wù)執(zhí)行的,當(dāng)我們?cè)谡l(shuí)的初始化時(shí)添加 handle 任務(wù)莫杈,就是表示在誰(shuí)的渲染之后執(zhí)行

  • 寫法1 表示在 activity 的初始化完成后執(zhí)行任務(wù)互例,也就是 onresume 之后執(zhí)行
  • 寫法1 表示在 view 控件的初始化完成后執(zhí)行任務(wù),也就是 view 顯示之后執(zhí)行

大家可以看 trace 圖


寫法1
寫法2

可以明顯的看到寫法1 的 handle 任務(wù)是在 rootviewimpl 渲染 view 之前執(zhí)行的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筝闹,一起剝皮案震驚了整個(gè)濱河市媳叨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌关顷,老刑警劉巖糊秆,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異议双,居然都是意外死亡痘番,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門平痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)夫偶,“玉大人,你說(shuō)我怎么就攤上這事觉增”#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵逾礁,是天一觀的道長(zhǎng)说铃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)嘹履,這世上最難降的妖魔是什么腻扇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮砾嫉,結(jié)果婚禮上幼苛,老公的妹妹穿的比我還像新娘。我一直安慰自己焕刮,他們只是感情好舶沿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著配并,像睡著了一般括荡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溉旋,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天畸冲,我揣著相機(jī)與錄音,去河邊找鬼。 笑死邑闲,一個(gè)胖子當(dāng)著我的面吹牛算行,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苫耸,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼州邢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鲸阔?” 一聲冷哼從身側(cè)響起偷霉,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迄委,失蹤者是張志新(化名)和其女友劉穎褐筛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叙身,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渔扎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了信轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃痴。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖财忽,靈堂內(nèi)的尸體忽然破棺而出倘核,到底是詐尸還是另有隱情,我是刑警寧澤即彪,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布紧唱,位于F島的核電站,受9級(jí)特大地震影響隶校,放射性物質(zhì)發(fā)生泄漏漏益。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一深胳、第九天 我趴在偏房一處隱蔽的房頂上張望绰疤。 院中可真熱鬧,春花似錦舞终、人聲如沸轻庆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榨了。三九已至,卻和暖如春攘蔽,著一層夾襖步出監(jiān)牢的瞬間龙屉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留转捕,地道東北人作岖。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像五芝,于是被迫代替她去往敵國(guó)和親痘儡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353