gpt4 book ai didi

android - AppNotIdleException 由于 AnimatedVectorDrawableCompat

转载 作者:行者123 更新时间:2023-12-02 04:25:38 25 4
gpt4 key购买 nike

我有以下动画矢量可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_ventilation" >
<target
android:name="fan_group"
android:animation="@animator/fan_rotation_animation" />
</animated-vector>

它只是使用旋转动画为风扇设置动画。

我在 ImageView 中设置此图标并控制开始/停止动画调用以下方法(仅在 Lollipop 和 high 中):

public void setStopped(boolean stopped) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
this.setImageResource(R.drawable.ic_ventilation_animated);
Drawable drawable = this.getDrawable();
if (drawable instanceof AnimatedVectorDrawableCompat) {
if(stopped) {
((AnimatedVectorDrawableCompat) drawable).stop();
} else {
((AnimatedVectorDrawableCompat) drawable).start();
}
}
}
}

但我得到以下异常:

android.support.test.espresso.AppNotIdleException: Looped for 3654 iterations over 60 SECONDS. The following Idle Conditions failed .
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:580)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:88)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:51)
at android.support.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:312)
at android.support.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:173)
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:114)

我在开发者选项菜单中禁用了动画,如解释的那样 here .禁用动画后,我看到图标在调用 ((AnimatedVectorDrawableCompat) drawable).start(); 后不再动画。但是,引发了异常。

即使在禁用动画的情况下调用 ((AnimatedVectorDrawableCompat) drawable).start(); 方法时是否存在问题?我该如何解决这个问题,以便我可以运行我的测试而无需关心动画?

最佳答案

在我的例子中,这个问题是由设置为无限重复动画的 objectAnimator (android:repeatCount="infinite") 引起的。

该问题也仅出现在较旧的平台版本上。测试在 Android 9 上完美运行,而问题在 Android 5 和 6 上重现(目前不确定 7 和 8)。

我相信,问题的根本原因与不确定的进度条 (covered in this SO question) 相同。但是,我还没有找到任何好的解决方案,只有变通办法。

其中一种解决方法是在设置中检测到动画已关闭(animator 持续时间为 0)并且不启动动画。当然,这仅适用于动画不会自动启动的平台版本。

private fun startIconAnimation(imageView: ImageView) {
if (areAnimationsEnabled()) {
(imageView.drawable as Animatable).start()
}
}

private fun areAnimationsEnabled(): Boolean {
val animatorDurationScale = Settings.Global.getFloat(
requireContext().contentResolver,
Settings.Global.ANIMATOR_DURATION_SCALE,
1.0f
)
return animatorDurationScale != 0.0f
}

注意:API 级别 26 引入了一个静态方法 ValueAnimator.areAnimatorsEnabled() 如果问题不仅仅发生在旧平台版本上,它会很方便。

关于android - AppNotIdleException 由于 AnimatedVectorDrawableCompat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com