安卓手機應用中界面切換卡頓和滑動卡頓的區別是什麼,請從專業角度解釋?或者給出一個開發者需要注意事項?


這不是阿里的網測題么…

於是直接貼我的答案……

不過需要注意的是,我舉的例子並不是完備的。

而且答題時間有限,而我打字有點慢..所以如果有錯也別打我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程序員的技術差距在哪?

TAG:Android開發 | Android |