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