Android - 全高清显示的滞后片段转换

Android - Laggy fragment transition with full hd display

我在我的应用程序的登录部分有一个简单的动画片段过渡 - 请参阅 anim.xml。片段的背景设置来自 xml 中的可绘制对象,一切正常,除非我在具有全高清显示屏的智能手机上对其进行测试。过渡突然变得滞后。任何人都知道是什么原因造成的?两个背景都是1080*1920分辨率。

anim.xml - 动画示例(其中 4 个用于两侧的进出动画)

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="250"/>
</set>

好吧,经过一段时间(很长一段时间)尝试解决这个问题,我的问题的唯一解决方案是将片段事务之前的背景图像更改为一些低分辨率图像,并检查动画的结尾以将其改回到高分辨率图像。丑陋但至少它有效。

不过,如果您以后采用这种方式,预计在检测动画结束时会遇到一些麻烦。片段有 onCreateAnimation 方法,你可以在其中添加 AnimationListener,它有检测动画开始、重复和结束的方法,但它有检测动画结束的错误行为。回调在动画结束之前触发,这使得您的片段事务在即将结束时变得滞后(在我的例子中它是最后十个像素左右)。

以非常丑陋的方式解决它 - 在动画结束时实现 10 毫秒的 CountDownTimer,并在计时器结束后将背景更改为高分辨率。

此外,Fragment 的 onCreateAnimation 的文档很少,因此您不知道它的参数是什么,我找到了这个亚洲网页,它帮助我理解了它。
http://y-anz-m.blogspot.cz/2013/05/support-package-fragmenttransaction.html

无论如何,我不知道 FragmentTransaction 的背景是如何工作的,但感谢 Google 如此出色的 FragmentTransactions 和 AnimationListeners 实现。

对我来说,您似乎遇到了性能问题(可能与 GPU 有关,也许您有透支)。我不知道它的原因是什么,但有很多工具可以帮助您更好地了解正在发生的事情。 看看这篇文章http://www.curious-creature.com/docs/android-performance-case-study-1.html

另外 android 性能模式视频可能会有帮助。我强烈建议观看这些:

工具 - 配置文件 GPU 渲染 https://www.youtube.com/watch?v=VzYkVL1n4M8

透支https://www.youtube.com/watch?v=T52v50r-JfE

UI 和 GPU https://www.youtube.com/watch?v=WH9AFhgwmDw

为什么是 60 毫秒 https://www.youtube.com/watch?v=CaMTIgxCSqU

几年后的经验-把你的形象放在drawable-nodpi

点头

These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen's density.