我有一个使用postDelayed调用的活动:
public class SplashActivity extends Activity {
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
handler.postDelayed(new Runnable() {
public void run() { finish(); }
}, 3000L);
}
}
这个在应用启动时运行,我需要在我的登录界面和此之间进行导航。然而,UIController的loopMainThreadUntilIdle似乎没有考虑处理程序中的基础消息队列。因此,在队列中仍然存在消息时,此操作将立即完成。
onView(withId(R.id.splash_screen)).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(View.class);
}
@Override
public String getDescription() {
return "";
}
@Override
public void perform(final UiController uiController, final View view) {
uiController.loopMainThreadUntilIdle();
}
});
我一直无法想出如何阻塞,直到队列被排空。Android本身防止我尝试许多事情(比如扩展Handler并重写postDelayed方法等)。
有人有关于如何处理postDelayed的建议吗?
我宁愿避免使用uiController.loopMainThreadForAtLeast,因为它似乎很hacky(就像Thread.sleep一样)。