Android閃屏問題的分析思路,android閃思路

來源:互聯網
上載者:User

Android閃屏問題的分析思路,android閃思路

閃屏問題作為Android的一類常見問題,原因複雜多樣.我們在這裡整理一下如何分析閃屏問題,找到具體導致閃屏問題的原因.


嚴格從技術來說,閃屏問題不能歸為一類問題,他是因為螢幕快速變化導致使用者看起來顯示不正常的問題(很多測試者甚至會將花屏問題當做閃屏問題,這裡不做討論).它可能是多種完全不同的原因導致的,硬體問題,驅動問題,繪製問題,合成問題,視窗調度問題,activity問題,以及app本身的邏輯問題都有可能導致使用者看起來螢幕閃屏的感覺,其中百分之九十以上閃屏的問題是由後三種問題導致的.


特殊指出的是,由於閃屏問題基本都是邏輯錯誤而不是異常,基本難以單純從log中看到異常資訊,因此要分析閃屏問題,可複現的問題最好,如果不能,起碼要保證有清晰完整的螢幕錄影(adb shell screenrecord錄下來的最好),否則問題無法分析.

下面我們來講下如何分析一個可複現的閃屏問題:

1 首先來確認下問題是否和螢幕硬體以及驅動有關1.1 螢幕錄影,是不是螢幕問題?

這個問題很好確認,將手機串連電腦,輸入adb shell screenrecord /sdcard/tt.mp4,稍等片刻,開始複現問題,在問題複現完畢後,停止命令執行,去手機sdcard目錄下查看視頻檔案.
如果視頻檔案中問題不存在,說明這個問題和螢幕硬體驅動或者MDP合成有關係,我們需要繼續區分這到底是螢幕問題還是合成問題.

1.2 是不是合成問題?

如何區分這到底是螢幕問題還是合成問題呢?開啟開發人員選項,勾選禁用硬體疊加選項.
重新複現問題,如果問題依然複現,說明問題是LCD驅動或者硬體層面導致,這是需要LCD組進行check;
如果問題不再複現,說明這很大可能是一個MDP合成問題,需要平台廠商進行check.

1.3 underruan問題?

這裡指出一種特別的閃屏問題,如果螢幕閃爍規則的半個螢幕的藍色或者黑色矩形,我們有理由懷疑是發生了underrun,這種閃屏問題是可以通過log來確認的,一般來說如果在log中看到顯示有關的硬體列印了underrun的log,說明此時發生了underrun.一般是由於平台某個硬體頻寬不足引起的,建議將問題交給平台來處理.

2 接下來我們需要看下是不是繪製或者硬體加速問題2.1 是不是硬體加速問題?

其實,一般來說,如果閃屏只發生在某個特定的路徑下,一般基本沒有可能是繪製的問題或者GPU的問題(因為繪製錯誤只會導致花屏,不可能導致螢幕大小層級的閃屏,如果繪製或者GPU出問題導致閃屏,一般會出現整個系統所有app不分路徑的閃屏),儘管可能性很小,我們也可以測試排除一下.

關閉發生閃屏的程式的硬體加速,在app的AndroidManifest.xml檔案中,加入application android:hardwareAccelerated="false" ,如果問題發生在兩個app切換時,關閉兩個app的硬體加速,重新編譯app,拷貝替換.

複現問題,如果問題繼續複現,說明這個問題和繪製沒有關係;如果問題不複現,需要繼續排查是GPU硬體問題還是硬體加速問題導致的閃屏.

2.2 是不是GPU問題?

一般來說,如果是GPU出現問題,會不分路徑的,在除了全屏視頻播放之外的所有路徑下都可能出現大範圍的閃屏,這種情況下log中一般搜尋opengl的log,會發現在閃屏的應用打出了海量的opengl error的log,這種情況下,很有可能是發生了硬體損壞,建議交給硬體部門check.

3 繼續分析問題

如果經過前面的check,我們確定不是硬體的問題,不是驅動的問題,不是繪製的問題,也不是合成的問題.那基本上這個問題就是上層的問題,為了確定到底發生了什麼問題,我們需要進一步的確認.

3.1 再一次的分析錄影

對於閃屏問題,adb shell screenrecord錄到的視頻是最有分析價值的,所以我們需要進一步分析.
分析之前請下載一款具有進階視頻調節功能的播放器,逐幀播放問題發生時的錄影.

因為閃屏問題,很多時候是切換的問題,那麼我們也可以放慢動畫速度來觀察現象.開啟開發人員選項,將其中的視窗動畫比例,過渡動畫比例,以及動畫影像時間伸縮效果都設定為10x,這樣我們也可以清晰的看到切換的時候發生了什麼問題.

此時剩下的問題一般就是activity或者視窗快速切換讓使用者產生了螢幕在閃的幻覺,這種問題大多都可以通過查看錄影慢放明顯的看到不該出現的activity(視窗)出現了,這種問題就是app本身在activity的切換邏輯上有問題,這樣我們就可以從app的角度進行分析(如果慢放動畫可以使得現象變慢的話,我們也可以在問題發生時,抓取SurfaceFlinger的dumpsys,以及通過ADT的Hierarchy view查看閃出來的是哪個activity).

一種比較少見的問題是,app使用了某種特殊的動畫效果,讓測試者或者使用者感覺是閃屏問題.這個時候,在開發人員選項中的繪圖選項中,將三個動畫相關的設定都修改為動畫已關閉.如果問題消失,那麼可以確定是app自身使用了某種特殊的看起來像是閃屏的動畫效果.

當然還存在另外一種情況,視窗數量是正常的,但是視窗之間在不正常的頻繁切換.

對於後一種情況,只靠查看視頻還不能完全確認,我們還需要查看log來進一步確認.

3.2 查看log中視窗的變更和繪製

視窗之間在不正常的頻繁切換,對待這種問題,一個最簡單有效辦法是,在問題複現時,保持手指一指觸控螢幕幕,然後抓取log,我們會看到觸摸的焦點視窗一直在高速變化,如下:

11-01 10:45:07.047: D/InputDispatcher(1106): Focus left window: Window{1784331e u0 ..}11-01 10:45:07.087: D/InputDispatcher(1106): Focus entered window: Window{1784331e u0 ...}11-01 10:45:07.207: D/InputDispatcher(1106): Focus left window: Window{1784331e u0 ...}11-01 10:45:07.237: D/InputDispatcher(1106): Focus entered window: Window{1784331e u0..}11-01 10:45:07.257: D/InputDispatcher(1106): Focus left window: Window{1784331e u0 ...}11-01 10:45:07.287: D/InputDispatcher(1106): Focus entered window: Window{1784331e u0 ..}


這樣我們就可以斷定是app在進行不正常的window切換,我們就可以從app的角度檢查一下在問題發生時activity的切換邏輯了.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.