我正在使用Robolectro3.0 (ToT)。
在我在onCreate的活动中,我打了以下电话:
mHandler.postDelayed(mRunnable, 10 * 60 * 1000)然后,在我的Robolectric测试用例中,我设置了活动并立即启动了runnable (碰巧,它调用了finish())。我怎样才能防止这种情况发生呢?
我使用了ShadowLooper.pauseMainLooper();来阻止Runnable的触发,但这对我来说不是一个好的解决方案。我在测试中发送广播,当主活套暂停时,它们不会被接收。当我取消暂停时,这两个意图都会传递给广播接收器,并且运行Runnable。我如何才能让广播接收器运行,而不是延迟的Runnable。
发布于 2015-01-23 02:03:33
我在将Runnable发布到Handler或使用Looper.If (如果是您)方面没有多少经验,我会使用Handler消息请求执行特定的操作。您可以使用Handler.SendMessageDelayed(message,time)来延迟任务的发生,使用Handler.SendMessage(message)来执行直接的任务。您需要在Handler的handleMessage函数中运行任务。有关示例,请参阅“代码”。
public class incomingHandler extends Handler {
@Override
public synchronized void handleMessage(Message msg){
switch(msg.what){
case 0 : finish(); break;
case 1 : "RUN FUNCTION OR DO SOMETHING ELSE"; break;
default : "HAVE YOUR DEFAULT MESSAGE SERVICE HERE";}
@Override
protected void onCreate(Bundle savedInstanceState)
{super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ui);
Handler mHandler = new incomingHandler();
mHandler.sendMessage(Message.obtain(null, 1));
//This will cause your function to run immediately
mHandler.sendMessageDelayed(Message.obtain(null,0),5000L) ;
//This will cause you activity to finish after 5 seconds
}我希望这能帮到你。
发布于 2015-12-24 12:16:18
深入钻研“知更鸟”,我看到罗宾会立即执行未来的任务(为什么你会问?)我的猜测是,他们不希望你等待任务),而是将一个名为currentTime (Scheduler.class)的变量更新为新的假时间。
所以你永远不会等待任务的完成,差不多。
而且似乎也有一个设计缺陷,他们实际上没有运行正常的任务,因为不能等待的事情。例如,如果要在handler.sendEmptyMessage()中调用onLooperPrepared(),则任务将立即发出,不会排队或等待onLooperPrepared()调用的结束。
就目前而言,我已经试着独自嘲笑卢珀,而且我也取得了一些成功。
https://stackoverflow.com/questions/28101374
复制相似问题