gpt4 book ai didi

java - postDelayed() 与 Android 消息

转载 作者:行者123 更新时间:2023-12-01 09:15:18 26 4
gpt4 key购买 nike

我希望我的主 UI 线程在向工作线程发送空消息以执行某些操作之前有效地“ sleep ”1 秒。

Sleep() 对我来说是一个问题,因为在执行 sleep() 时我无法正确 quit() 线程,所以我想将其更改为 postDelayed(runnable r, long msDelay) 但它需要 runnable 对象,而不是 Message。我如何更改此代码?我只是将空消息从主 UI 线程传递到工作线程。

用户界面线程:

public class MainActivity extends Activity
{
static Worker w1, w2;

static Handler mainUIHandler = new Handler()
{

@Override
public void handleMessage(Message msg)
{
String sender = msg.getData().getString("SENDER");

if (Objects.equals(sender, "CPU1"))
{
mInfoTextView.setText("worker 1 thinking...");

//how to change the following 2 lines to postDelayed()?
try{
Thread.sleep(1000);
} catch (Exception ignored) { }

w2.handler.sendMessage(w2.handler.obtainMessage());

}
}
};
...
}

和工作线程

 class Worker extends HandlerThread
{
...

Worker(String name)
{
super(name);
}


Handler handler= new Handler()
{
@Override
public void handleMessage(Message msg)
{
//perform work
Foo work = dowork();
//communicate work to the UI thread to update the display
Message message = MainActivity.mainUIHandler.obtainMessage();

Bundle bundle = new Bundle();
bundle.putString("NAME", name);
bundle.putInt("work", work);

message.setData(bundle);

MainActivity.mainUIHandler.sendMessage(message);
}
};

@Override
public void run()
{
this.setName(WorkerThread.class.getName());
this.setPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
}
}

我尝试创建一个新的 Runnable() 并将其传递给 postDelayed():

  w2.handler.postDelayed(new Runnable()
{

@Override
public void run()
{
System.out.println("hello");
}
}, 1000);

但它没有触发 w2 中的处理程序

最佳答案

您可以使用 Handler.sendMessageDelayed() 延迟消息 :

public class MainActivity extends Activity {

// ...

static Handler mainUIHandler = new Handler() {

@Override
public void handleMessage(Message msg) {

// ...

w2.handler.sendMessageDelayed(w2.handler.obtainMessage(), 1000);
}
}
}

关于java - postDelayed() 与 Android 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40593792/

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