2017-06-16 127 views
2

在控制檯中新的Android Vitals部分,我收到了超過60%的會話受到慢UI渲染時間影響的警告(錯過了Vsync:1.02%,慢UI線程:14.29%慢畫命令:96.84%)。我打開GPU剖析我的測試設備上(使用應用程序的生產版本),我看到造成渲染時間超過16毫秒(約24-30ms)以下的TextView更新:更新時慢速渲染TextView

updateTimer = new Timer(); 
updateTimer.scheduleAtFixedRate(new TimerTask() { 
    @Override 
    public void run() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       timeLeftView.setText(timeLeftString); 
      } 
     }); 
    } 
}, 100, 500); 

當我註釋掉了textView更新,屏幕上沒有任何更改,並且profiler不會創建任何新條形圖。

一條線索是,當用計時器打開活動時,定時器的前3-4個更新已經呈現在大約8ms,但然後他們上升到大約24-30ms。

另一個線索是當我觸摸屏幕的任何部分,渲染時間回落到8ms約幾秒鐘,然後再次射擊到24-30ms。當我停止觸摸時,渲染時間再次下降幾秒鐘,然後再次拍攝。

所以想什麼,我知道的是:

  1. 這是正常的,這樣一個簡單的TextView更新引起高渲染時間?
  2. 這是什麼攪亂了我的Android生命?因爲它每秒運行兩次。問題可以在別處嗎?上述代碼是在GPU分析中創建高分辨率的唯一方法,應用程序的其他元素工作正常,具有多個文字瀏覽和圖像的長列表視圖渲染時間大約爲8ms。
  3. 我可以做些什麼來減少這些繪製時間?我試着去除了TextView的佈局中的居中和重心,以及wrap_content(如另一個答案中的建議),但都沒有任何效果。除此之外,我不確定要做什麼。
+0

我有一個非常類似的問題https://stackoverflow.com/questions/44233870/how-to-fix-slow-rendering-android-vitals。如果你有所進步,或許你想分享。現在這個問題已經成爲我的最前沿,因爲我無法將它測試的設備限制在Pixel上。 –

+0

現在他們已經正式聲明Android的不良行爲會影響Play商店的應用排名。 –

+0

那些老鼠混蛋。至於取得進展,我已將這種行爲的會話數量從68%減少到35%,這仍然過多。 – TimSim

回答

0

嘗試了幾乎所有的建議。

最後通過將可運行的頻率從500ms增加到50ms或更短來解決它。問題在於,可運行的低頻率讓CPU/GPU進入低功耗狀態,所以耗時更長。通過增加可運行和繪製的頻率,CPU/GPU不會進入低功耗狀態,並且幀被繪製得更快。是的,它對電池徵稅更多,但並不像屏幕上那麼多。沒有用戶抱怨過,Android的重要性現在很高興。

此外,看看設備製造商的默認/官方應用程序如何工作(包括來自Google本身),這正是他們處理TextView更新的方式。例如Google的時鐘應用程序(倒數計時器,而不是秒錶)每秒鐘更新TextView〜60次,即使每秒只需要一次,也是最節約的。

1

如果你在你的xml中放置了很多圖層,它會強制android渲染多次(如果你有很多圖層,則重做你的代碼!!)。 我強烈推薦此閱讀:https://developer.android.com/training/improving-layouts/index.html

關於渲染TextView多次,渲染的速度取決於您運行應用程序的設備!

+0

什麼是圖層?你的意思是佈局? – TimSim

+0

A 3維層: .. ... <的LinearLayout> ... .... ... ....

+0

哦,謝謝,我可能有一些。我將學習如何使用您提供的鏈接中建議的hierarychy查看器,並查看是什麼。 – TimSim