[英]Where does main or UI thread in android prepare looper?
似乎在主线程中,我只需要编写一个扩展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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.