gpt4 book ai didi

android - robolectric:Handler.postDelayed 立即运行

转载 作者:行者123 更新时间:2023-11-28 20:15:02 31 4
gpt4 key购买 nike

我正在使用 Robolectric 3.0 (ToT)。

在我的 onCreate Activity 中,我进行了以下调用:

mHandler.postDelayed(mRunnable, 10 * 60 * 1000)

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

我使用了 ShadowLooper.pauseMainLooper(); 来阻止 Runnable 的触发,但这对我来说不是一个好的解决方案。我在测试中发送广播,当主循环程序暂停时,他们没有收到。当我取消暂停时, Intent 被传送到广播接收器并且 Runnable 被运行。我怎样才能让广播接收器运行,而不是delayed Runnable

最佳答案

我在将 Runnable 发布到 Handler 或使用 Looper 方面经验不多。如果我是你,我会使用 Handler Messages 来请求执行某个操作。您可以使用 Handler.SendMessageDelayed(message,time) 来延迟任务的发生,并使用 Handler.SendMessage(message) 来完成即时任务。您需要在处理程序的 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
}

希望对您有所帮助。

关于android - robolectric:Handler.postDelayed 立即运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28101374/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com