首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Handler.postDelayed立即运行

Handler.postDelayed立即运行
EN

Stack Overflow用户
提问于 2015-01-23 00:53:52
回答 2查看 1.9K关注 0票数 2

我正在使用Robolectro3.0 (ToT)。

在我在onCreate的活动中,我打了以下电话:

代码语言:javascript
复制
mHandler.postDelayed(mRunnable, 10 * 60 * 1000)

然后,在我的Robolectric测试用例中,我设置了活动并立即启动了runnable (碰巧,它调用了finish())。我怎样才能防止这种情况发生呢?

我使用了ShadowLooper.pauseMainLooper();来阻止Runnable的触发,但这对我来说不是一个好的解决方案。我在测试中发送广播,当主活套暂停时,它们不会被接收。当我取消暂停时,这两个意图都会传递给广播接收器,并且运行Runnable。我如何才能让广播接收器运行,而不是延迟的Runnable

EN

回答 2

Stack Overflow用户

发布于 2015-01-23 02:03:33

我在将Runnable发布到Handler或使用Looper.If (如果是您)方面没有多少经验,我会使用Handler消息请求执行特定的操作。您可以使用Handler.SendMessageDelayed(message,time)来延迟任务的发生,使用Handler.SendMessage(message)来执行直接的任务。您需要在Handler的handleMessage函数中运行任务。有关示例,请参阅“代码”。

代码语言:javascript
复制
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
}

我希望这能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2015-12-24 12:16:18

深入钻研“知更鸟”,我看到罗宾会立即执行未来的任务(为什么你会问?)我的猜测是,他们不希望你等待任务),而是将一个名为currentTime (Scheduler.class)的变量更新为新的假时间。

所以你永远不会等待任务的完成,差不多。

而且似乎也有一个设计缺陷,他们实际上没有运行正常的任务,因为不能等待的事情。例如,如果要在handler.sendEmptyMessage()中调用onLooperPrepared(),则任务将立即发出,不会排队或等待onLooperPrepared()调用的结束。

就目前而言,我已经试着独自嘲笑卢珀,而且我也取得了一些成功。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28101374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档