Android,无限重复动画与instrumentation.waitForIdleSync()

时间:2013-11-22 18:12:27

标签: android animation

我有一个动画的custom view项目。动画是一个简单的alpha淡入淡出,无限重复。视图是cursor,它使cursor看起来像是在闪烁。当我开始为项目编写功能单元测试时,我遇到了getActivity()方法由于动画而在setUp方法中挂起的问题。 getActivity()在返回之前调用waitForIdleSync(),并且由于动画从头开始,getActivity()永远不会返回。这实际上花了我相当多的时间来弄清楚,我会开始测试,它会在那里无所事事......这也会在100%的时间内发生。

我不认为这是一个BUG,因为从技术上讲,如果动画正在运行,设备不会空闲,但这是一个问题。任何建议或变通方法允许动画从一开始就运行,但在waitForIdleSync期间使用ActivityInstrumentationTestCase2s将非常感激。我可以通过等待其他事件提供与测试操作和应用操作的同步来实现不使用waitForIdleSync()的变通方法,但是我仍然需要在某个时候调用getActivity()。一旦进入此方法,它永远不会返回无限重复动画。动画也必须在onRestart方法结束之前的某个时间开始。理想情况下,会有一个waitForIdle(int timeout)方法。

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

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

1 个答案:

答案 0 :(得分:1)

我遇到了这个问题,并将其报告为a bug on AOSP,但我不希望任何人会在短期内修复此问题。我的解决方法是删除动画(这是具有挑战性的,因为它是无限期的进度视图)。您的案例的一个选项是更改测试中的动画时序,以便它不会为每个帧设置动画。不理想,但比我怀疑的更好。