【发布时间】:2016-02-21 03:09:11
【问题描述】:
似乎在主线程中我只需要编写一个扩展 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();
但是在工作线程中确实需要先准备looper,然后才能创建Handler对象,否则threadLocal.get()无法获取当前工作线程的looper。我的问题是必须有某个地方为主线程准备弯针,但我就是找不到它。我不知道 threadLocal 是如何为主线程找到这个 looper 的。
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();
}
}
【问题讨论】:
-
见here
-
我想知道完全相同的问题。主线程Looper什么时候准备好。它确定它不会在应用程序类中自行准备。你不能在 Application 类中创建 Handler。
标签: java android multithreading handler