安卓黑白屏解決方案二

所有一切眾生之類:若卵生若胎生若濕生若化生纳寂;若有色若無色;若有想若無想若非有想非無想泻拦,我皆令入無余涅盤而滅度之毙芜。如是滅度無量無數(shù)無邊眾生,實(shí)無眾生得滅度者争拐。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ----佛說


代碼優(yōu)化

在構(gòu)建APP時(shí)爷肝,我們經(jīng)常需要應(yīng)用一些第三方的SDK,而項(xiàng)目業(yè)務(wù)越多陆错,引用的第三方也越多灯抛,有些第三方庫會(huì)要求我們?cè)贏pplication的oncreate方法中對(duì)其初始化,著意味著:在Application的oncreate方法中執(zhí)行時(shí)間越長(zhǎng)音瓷,首個(gè)activity布局渲染的時(shí)間也會(huì)相應(yīng)的拉長(zhǎng)对嚼。同理,如果我們?cè)谑讉€(gè)activity的oncreate绳慎,onstart,onResume方法中執(zhí)行的任務(wù)時(shí)間過長(zhǎng)纵竖,同樣也會(huì)導(dǎo)致布局的渲染時(shí)間越長(zhǎng)。這樣直接導(dǎo)致的問題就是杏愤,用戶感覺頁面遲遲沒有加載出來靡砌,用戶體驗(yàn)極差。

App啟動(dòng)時(shí)間的檢測(cè)

adb shell am start -W com.example.test/.SplashActivity

運(yùn)行結(jié)果

TotalTime:一系列Activity啟動(dòng)的時(shí)間

WaitTime:總啟動(dòng)時(shí)間珊楼,包含系統(tǒng)在冷啟動(dòng)時(shí)通殃,需要加載App信息到內(nèi)存的時(shí)間

通過以上命令可以檢測(cè)Activity的啟動(dòng)時(shí)間,一般情況下開發(fā)者只需要關(guān)注TotalTime厕宗,因?yàn)門otalTime這個(gè)時(shí)間是可控的画舌,而WaitTime是系統(tǒng)在冷啟動(dòng)時(shí),需要加載App信息到內(nèi)存的時(shí)間這個(gè)時(shí)間開發(fā)者是不可控的已慢。如果通過以上方式發(fā)現(xiàn)APP的啟動(dòng)時(shí)間沒有在一個(gè)合理的范圍之內(nèi)那應(yīng)該怎么定位到底是哪個(gè)代碼出了問題呢曲聂??佑惠?朋腋?齐疙??

問題代碼定位

示例代碼



通過Debug.startMethodTracing()方法和Debug.stopMethodTracing();方法包裹業(yè)務(wù)邏輯代碼塊旭咽,當(dāng)代碼執(zhí)行完畢的時(shí)候會(huì)生成一個(gè)app.trace文件剂碴,通過命令adb pull /storage/emulated/0//Android/data/com.example.test/files/app.trace 將生成的文件導(dǎo)入到項(xiàng)目下面。


將工程目錄下面生成的app.track文件拖入到AndroidStudio轻专,可以將app.track的信息讀取出來,會(huì)顯示如下頁面


Cpu usage details unavailable區(qū)域代表整個(gè)APP方法的調(diào)用情況察蹲,向右拖動(dòng)可以截取某一段代碼片段查看

Call Chart模塊圖分析搀崭,第一行顯示的init方法的調(diào)用以及test方法調(diào)用的耗時(shí)情況焊夸,由前面的代碼示例可以看出init方法調(diào)用了a方法,a方法調(diào)用了b方法和方法總共耗時(shí)3.2,此時(shí)Call Chart分析模塊第一行顯示init方法耗時(shí)3.2s舞萄,test方法耗時(shí)200ms,第二行顯示調(diào)用的a方法低滩,因?yàn)樵趇nit方法里面只調(diào)用了a方法缤言,a方法里面先是睡眠500ms,緊接著又調(diào)用了b方法和test方法审胚,所以耗時(shí)跟init方法一樣也是3.2s....依次分析匈勋,如果覺得上圖的分析不夠直觀也可以切換到Top Down模塊進(jìn)行分析,如下圖


通過以上的分析膳叨,我們已經(jīng)可以很準(zhǔn)確的定位到那些代碼是比較耗時(shí)的洽洁,針對(duì)耗時(shí)的代碼我總結(jié)了如下的解決方案。

一? 針對(duì)初始化比較耗時(shí)的代碼菲嘴,我們可以通過異步線程的方式對(duì)其進(jìn)行初始化饿自。

異步初始化代碼需要注意:

1在異步線程中調(diào)用的初始化的API不允許創(chuàng)建Handler

2 不能有更新UI的操作。

3 對(duì)異步要求不高龄坪,(什么叫對(duì)異步要求不高昭雌??健田?烛卧??妓局,比如說我們?cè)贏 acitvity里面做一個(gè)對(duì)數(shù)據(jù)的處理唱星,A activity處理完數(shù)據(jù)以后要跳轉(zhuǎn)到B activity,B activity需要拿到A activity的數(shù)據(jù)跟磨,那如果我們的A activity在處理數(shù)據(jù)的時(shí)候使用的是這樣一個(gè)異步線程间聊,這個(gè)時(shí)候很有可能導(dǎo)致在做頁面跳轉(zhuǎn)的時(shí)候異步線程還沒執(zhí)行完畢導(dǎo)致B activity,拿不到數(shù)據(jù)從而出現(xiàn)異常)

二 針對(duì)初始化比較耗時(shí)的代碼抵拘,我們可以通過懶加載的方式對(duì)其進(jìn)行初始化哎榴。

什么是懶加載?就是在使用的時(shí)候?qū)ζ溥M(jìn)行初始化,什么時(shí)候用什么時(shí)候初始化尚蝌,沒必要在程序剛開始啟動(dòng)的時(shí)候就對(duì)其進(jìn)行初始化迎变。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市飘言,隨后出現(xiàn)的幾起案子衣形,更是在濱河造成了極大的恐慌,老刑警劉巖姿鸿,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谆吴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苛预,警方通過查閱死者的電腦和手機(jī)句狼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來热某,“玉大人腻菇,你說我怎么就攤上這事∥舨觯” “怎么了筹吐?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秘遏。 經(jīng)常有香客問我骏令,道長(zhǎng),這世上最難降的妖魔是什么垄提? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任榔袋,我火速辦了婚禮,結(jié)果婚禮上铡俐,老公的妹妹穿的比我還像新娘凰兑。我一直安慰自己,他們只是感情好审丘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布吏够。 她就那樣靜靜地躺著,像睡著了一般滩报。 火紅的嫁衣襯著肌膚如雪锅知。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天脓钾,我揣著相機(jī)與錄音售睹,去河邊找鬼。 笑死可训,一個(gè)胖子當(dāng)著我的面吹牛昌妹,可吹牛的內(nèi)容都是我干的捶枢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼飞崖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼烂叔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起固歪,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蒜鸡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后牢裳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逢防,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贰健,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恬汁。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伶椿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氓侧,到底是詐尸還是另有隱情脊另,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布约巷,位于F島的核電站偎痛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏独郎。R本人自食惡果不足惜踩麦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氓癌。 院中可真熱鬧谓谦,春花似錦、人聲如沸贪婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疲迂。三九已至才顿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尤蒿,已是汗流浹背郑气。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腰池,地道東北人竣贪。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓军洼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親演怎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匕争,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355