安卓系统中,无限重复动画和instrumentation.waitForIdleSync()有什么区别?

3
我有一个带自定义视图的项目,其中包含动画。动画是简单的alpha淡入淡出,会无限重复。这个视图是一个光标,使得光标看起来像是在闪烁。当我开始为项目编写功能单元测试时,我遇到了setUp方法中getActivity()方法挂起的问题,原因是由于动画。getActivity()在返回之前调用waitForIdleSync(),并且由于动画在开头启动,getActivity()永远不会返回。这实际上花费了我相当长的时间去解决,我会开始测试,但却什么都没做......这也会100%发生。

我认为这不是一个BUG,因为从技术上讲,如果动画正在运行,则设备不空闲,但这是一个ISSUE。任何建议或解决方法,既可以让动画从一开始就运行,又可以在ActivityInstrumentationTestCase2s期间使用waitForIdleSync,将不胜感激。我可以实现一个解决方案,通过等待其他事件来提供测试操作和应用程序操作的同步,而不使用waitForIdleSync(),但是我仍然必须在某个时候调用getActivity()。一旦进入这个方法,具有无限重复动画的方法就永远不会返回。此外,动画必须在onRestart方法结束前的某个时刻开始。理想情况下,应该有一个waitForIdle(int timeout)方法。

我是否在错误的时间启动了动画,或者我是否没有使用正确的方法来启动动画?我通过编程方式启动/停止动画,因为需要在应用程序中启动和停止闪烁行为。下面是我用于启动动画的代码。从cursors构造函数中调用startBlinking(Context)方法......

public void startBlinking(Context context){
    Animation blink = AnimationUtils.loadAnimation(context, R.anim.cursor_blink);
    blink.setRepeatMode(Animation.RESTART);
    blink.setRepeatCount(Animation.INFINITE);
    startAnimation(blink);
}

我认为我遇到了与我在这个问题中描述的相同的问题。你解决了这个问题吗? - Gary Sheppard
1个回答

1
我遇到了这个问题,并将其报告为AOSP上的一个bug,但我不指望有人会很快修复它。我的解决方法是移除动画(这很具有挑战性,因为它是无限进度视图)。你的情况有一个选择,就是在测试中更改动画时间,使其不会每帧都动画。虽然不是理想的解决方案,但比冻结要好一些。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接