2017-06-16 78 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