似乎在主线程中,我只需要编写一个扩展Handler并覆盖其handleMessage方法的类。然后,我可以创建Handler对象,而无需准备循环程序。
class myHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s=(String)msg.obj;
textView.setText(s);
}
}
在主线程中,以下代码有效:
handler=new myHandler();
但是在工作线程中,您确实需要先准备循环程序,然后才能创建Handler对象,否则threadLocal.get()无法为当前工作线程获取循环程序。我的问题是必须在某个地方为主线程准备循环程序,但我只是找不到它。我不知道threadLocal如何为主线程找到该循环程序。
class WorkerThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println(msg.obj.toString());
System.out.println(Thread.currentThread().getName());
}
};
Looper.loop();
}
}
最佳答案
您将必须在主线程中定义Looper。
handler = new Handler(Looper.getMainLooper());
您可以从主线程或其他工作线程中调用此方法。
void timerMethod(){
handler.postDelayed(new Runnable() {
public void run() {
setTime();
}
}, timeDelay);
}
关于java - android中的main或UI线程在哪里准备弯针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796028/