2013-11-22 30 views
3

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

我不会认为这是一个BUG,因为从技术上讲,如果动画运行,设备不是空闲的,但是这是一个问题。任何建议或解决方法,以允许动画运行,从一开始,也使用期间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); 
} 
+0

我想我有同样的问题,我在[这个问题]中描述(http://stackoverflow.com/questions/20860832/why-does-getactivity-block-during-junit-test-when-custom- imageview的通话开始)。你有没有解决你的问题? –

回答

0

我有这个问题,报告说,它为a bug on AOSP,但我不希望任何人将尽快修复它的任何时间。我的解决方法是删除动画(这是具有挑战性的,因为它是无限期的进度视图)。你的情况的一个选择是改变你的测试中的动画时间,所以它不会动画每一帧。不理想,但比我怀疑的冻结更好。