0
我希望我的主UI线程在向工作线程发送空消息执行某些操作之前有效地“休眠”1秒钟。带消息的postDelayed()Android
Sleep()
是我的问题,因为我不能quit()
线程正确正在执行sleep()
一段时间,所以我想将其更改为postDelayed(runnable r, long msDelay)
但它需要runnable
对象,而不是Message
。我如何更改此代码?我只是从主UI线程传递空消息到工作线程。
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中触发处理程序
我这样做,但它不是信令工人处理程序。 - 请参阅OP –
的底部任何人?我仍然坚持 –
你见过'Handler.sendMessageDelayed()'吗? – nandsito