安卓手機應用中界面切換卡頓和滑動卡頓的區別是什麼,請從專業角度解釋?或者給出一個開發者需要注意事項?
這不是阿里的網測題么…
於是直接貼我的答案……
不過需要注意的是,我舉的例子並不是完備的。而且答題時間有限,而我打字有點慢..所以如果有錯也別打我OAQ另外…本答案基本基於 Google 的 Android開發指導。
在Android 中卡頓是因為 在UI線程上,進行了一次超過16ms(1s/60fps)的操作,例如寫入了大量文件等,導致GPU繪圖時無法拉取更新的圖像數據。
界面切換卡頓:
原因1:由於layout的層級過深,導致findviewbyid操作耗時過長。
解決方案1:使用 Hierarchy Viewer 工具,找出Layout 的性能瓶頸。
原因2:部分信息,例如 進度條等 可以在需要時載入。
解決方案2:使用 ViewStub 便可做到這一點
原因3:在onCreate() onstart()與onResume()方法中,進行了過多操作。
解決方案3:將耗時操作放在後台線程當中完成。
原因4:部分操作必須進行後,才能繼續更新頁面
解決方案4:應該放在後台線程中處理,在UI上顯示進度條。
屏幕滑動卡頓:
原因1:在UI線程上進行了大量耗時操作,例如 大量運算、執行磁碟讀寫、網路讀寫或是 SQL 操作。
解決方案1:使用後台線程來進行這些操作,UI線程應當專註UI繪畫。
原因2:滑動時可能經常調用 findViewById() ,這會消耗較多CPU資源。
解決方案2:使用 View Holder 來優化滑動性能。
原因3:繪製了被覆蓋的視圖。
解決方案3:可以使用開發者工具下的 」顯示過重繪「 功能檢查視圖是否存在過重繪問題,並優化layout,減少過重繪的部分。直接看這個吧http://hukai.me/android-performance-patterns/
因為Android本身設計缺陷,因為跑Android的手機性能太低,因為Android界面照搬iOS
那種在主線程里亂搞的就不提了
首先設計缺陷,舉個例子,稍微做過一點Android項目的人就知道,在稍微複雜一點的列表(比方說一個包含網路圖片TextView的列表)里要想獲得順暢的滑動體驗,ListView都是沒法用的,實際的做法一定都是弄個ScrollView一次Inflate出來整個列表,這樣會不佔內存嗎?Inflate的時候能不卡嗎?
性能太低,這個就很明顯了,iPhone不卡那也得是最新款,2年前的照樣卡死你
照搬iOS,導致大量Android原生支持的UI組件沒法直接使用,只能造輪子一個個重新實現,達到和iOS一樣的視覺效果,繪製組件能不複雜嗎?切換能不卡嗎?補充:A切換到B發生了什麼?A onPause -&> B onCreate -&> B onStart -&> B onResume -&> A onStop界面切換卡的原因請從上面前三個函數中找問題,問題的可能性是很多的,布局inflate過慢、載入本地數據過慢、耗時計算什麼的,都有可能;
Dalvik虛擬機進行垃圾回收操作時,會出現卡頓。
推薦閱讀:
※如何評價 2017 年 8 月 21 日發布的 Android Oreo (8.0)?
※Android開發,剛進入時被用戶關閉定位許可權,然後怎麼又在後面打開?
※PC上開發一個安卓模擬器,至少需要搭配怎樣的團隊,做到夜神、海馬、逍遙的程度有多大?
※零基礎如何學習安卓應用開發?
※BAT之類的大公司的android程序員跟普通公司的android程序員的技術差距在哪?