多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android冷啟動白屏解析,帶你一步步分析和解決問題

Android冷啟動白屏解析,帶你一步步分析和解決問題

來源:程序員人生   發布時間:2016-06-30 15:50:49 閱讀次數:3702次

轉載請注明出處:http://blog.csdn.net/guolin_blog/article/details/51019856

本文同步發表于我的微信公眾號,掃1掃文章底部的2維碼或在微信搜索 郭霖 便可關注,每天都有文章更新。

寫在前面

記得在本月初,我發表了1篇文章叫《 Android Studio新功能解析,你真的了解Instant Run嗎?》,里面詳細講授了Android Studio中新加入的Instant Run功能,使得我們開發的效力可以大大地提升。

不過對這個功能也有很多朋友提出了疑問,比如我在我的博客評論區就看到了這樣的評論:

關于首次啟動程序白屏時間太長這個問題其實我也早就發現了,而且正如評論中所說,有的時候白屏時間可以長達78秒。

看來這個問題已是1個普遍存在的現象了,可能很多人對此都產生了疑惑。那末這里我就專門寫1篇文章來為大家答疑解惑吧。

問題重現

我初次發現這個問題是在升級了Android Studio 2.0以后,當時Android Studio的版本是從1.5直接升級到了2.0,1個如此大版本的跨躍說明改動肯定是比較大的。

然后從這個時候開始,每次我們將程序安裝到1臺新手機上并首次啟動時,都會經歷1個很長的白屏時間,以下圖所示:

上圖中的播放速度是實時速度,沒有經過加速或減速。可以看到,這就是1個空項目,里面幾近沒有任何功能,首次啟動白屏居然延續了5秒鐘左右!雖然說只是首次啟動才會白屏這么長時間,但給用戶造成這樣的體驗,實在是顯得我們的程序太業余了,因此必須要想辦法解決1下。

分析緣由

1開始我將這個緣由歸結因而Android Studio 2.0的bug,畢竟1次性做了這么大的升級,有點bug也是很正常的。但是直到現在最新的Android Studio 2.2版本,這個問題仍然還存在,好像Google完全就沒有修復它的意思,這就不太對勁了。

然后我開始動手做實驗,發現這個長時間白屏的問題其實和Android Studio的版本是沒有關系的,而是和我們使用的gradle插件版本有關系。打開build.gradle文件查看1下,代碼以下所示:

buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.2' } }

可以看到,這里我使用的gradle插件版本是2.1.2,這個版本下是會出現長時間白屏的問題的。

但如果我將gradle插件的版本號下降,比如降到2.0.0,再運行程序的話就給彈出這樣的提示:

提示我2.0.0版本的gradle插件是不支持Instant Run的,讓我升級到2.1.2。但同時你會發現,長時間白屏的問題不見了。

但這里我還要再專門說明1下,其實其實不是2.0.0版本的gradle插件不支持Instant Run,而是由于我當前使用的是2.1版的Android Studio,它和2.0.0版本的gradle插件在Instnat Run功能方面不兼容。如果你是使用的2.0版本的Android Studio,那末你會發現2.0.0版本的gradle插件也是支持Instant Run的。

如果你有興趣的話可以把gradle插件的版本號再改低1些,比如1.5.0,或1.3.0,這兩個插件版本就是完全不支持Instant Run功能了,你會發現它們都不會造成長時間白屏的問題。

這樣我們基本就把問題的緣由定位出來了,支持Instant Run功能的時候就會出現長時間白屏的情況,不支持Instant Run功能的時候就1切正常,看來罪魁罪魁果然還是Instant Run呀。

解決問題

但是Instant Run是Android Studio 2.0中重磅推出的功能,如果存在這么嚴重的bug,那末誰還敢使用呢?Google豈不是推出了1個廢功能?

固然不是,遇到這個問題就嚇得不敢用Instant Run的話,只能說明你對Instant Run功能沒有真正理解。Instant Run為了能夠讓我們快速部署代碼,背后實際上是有1套非常復雜的邏輯的,比如要在APK中建立服務器與Android Studio進行通訊,和代碼差異比對和替換等,這里給大家貼1張Instant Run的工作原理圖來體驗1下:

這張圖比較復雜,看不懂也沒關系,由于我也看不懂,但是最少這讓我們能直觀地感遭到Instant Run背后處理的工作是非常沉重的。

既然如此,相信大家也應當理解1下為何首次啟動會白屏這么長時間,由于為了要讓Instant Run可以正常工作,我們的程序需要做非常多的初始化工作。而這1次的長時間白屏,換來的卻是后續開發效力的劇增,這個交易我認為是相當值得的。

那有的朋友可能就要產生質疑了,說我們理解有甚么用呀?用戶又不會理解甚么是Instant Run,這么久的白屏是會嚴重損傷用戶體驗的。

但是大家有無想過Instant Run是用來做甚么的?是用來提升開發效力的,沒錯,就是開發效力!也就是說,只有在開發階段才會有Instant Run這個東西,在正式的產品中是完全不存在Instant Run的!

是否是1語點醒夢中人了?其實說白了,我們擔心這個長時間白屏會損傷用戶體驗純潔是在杞人憂天,Google早就幫我們都斟酌過了,release版的程序是不會出現這類現象的。不信的話我現在就打1個簽名后的APK包,然后我們裝得手機上試1下,以下所示:

這和剛才是1模1樣的程序,我沒有修改任何的代碼,只是打了1個release包,現在就沒有長時間白屏的情況了。

進1步優化

如果你的視察力非常敏銳的話,應當能發現其實我們的程序還是會經歷1個白屏的階段,只不過非常短,瞬間就跳過了。

這個就和Instant Run無關了,這是由于在啟動的時候程序都要進行1些基本的初始化操作,所有程序都是要經歷這個進程的。

雖然說這個白屏時間很短,并沒有甚么太大的影響,不過我們還是可以通過代碼來進1步優化的。修改styles.xml中主題相干的代碼,以下所示:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ...... <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style>

其中我們加入了兩個屬性,windowIsTranslucent和windowNoTitle,將這兩個屬性都設置成true,就能夠讓程序在初始化的時候窗口是透明的,初始化結束后程序主界面才會顯示出來,從而也就完全看不到白屏界面了,以下圖所示:

使用這類方式,雖然白屏界面看不到了,但是由于初始化的進程中窗口是透明的,會讓用戶感覺程序啟動的響應速度略微慢了點,不過其實這類差別都是毫秒級的,就沒必要再為這個擔心了。


關注我的微信公眾號,每天都有優良技術文章推送,你還可以向公眾號投稿,將自己總結的技術心得分享給大家。
掃1掃下方2維碼或在微信搜索 郭霖 便可關注:

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美黑人xxxx性高清版 | 一区二区免费 | 亚洲天堂一区 | 成人免费a视频 | 国产精品国产三级国产专不∫ | 国产精品久久九九 | 日韩精品欧美 | 国产亚洲综合视频 | 欧美浮力第一页 | 久操视频网 | 成人国产一区二区三区精品 | 亚洲一区二区福利视频 | 免费www视频| 国产精品99r8免费视频2022 | 亚洲区欧美中文字幕久久 | 成人免费视频视频在线不卡 | 欧美激情福利视频在线观看免费 | 久久2| japanese中文字幕 | 亚洲区欧美中文字幕久久 | 亚洲成熟| 欧美高清在线视频在线99精品 | 在线午夜影院 | 一区二区三区中文国产亚洲 | 国产日韩欧美久久久 | 久久亚洲精中文字幕冲田杏梨 | 综合图片区 | 国产理论视频在线观看 | free hd xxxx video喷水| 国产精品一区二区久久精品涩爱 | 国产成人a一在线观看 | 免费在线观看成年人视频 | 国产视频久久久 | 一二三四在线播放免费观看中文版视频 | 一区二区三区福利视频 | 中国精品| 视频二区好吊色永久视频 | 欧美日韩在线视频播放 | 国产精品极品美女免费观看 | 欧美最猛黑人xxxx黑人猛交98 | 中文字幕一区精品 |