有人可以告诉我什么时候应该在处理程序中使用Looper吗?我有一个代码库,其中有多个线程和处理程序。但是并没有为所有人调用Looper.prepare()
和Looper.loop()
。
我怀疑是否需要looper来继续处理handleMessage方法中的消息?即使我们没有looper,当消息被发送到处理程序时,是否会调用handleMessage()? Looper在这里服务的另外一个目的是什么?
谢谢, Shamy
答案 0 :(得分:3)
用于为线程运行消息循环的类。默认情况下,线程没有与之关联的消息循环;创建一个,在运行循环的线程中调用prepare(),然后循环()让它处理消息,直到循环停止。
与消息循环的大多数交互都是通过Handler类进行的。
下面是一个线程的运行方法
@Override
public void run() {
try {
// preparing a looper on current thread
// the current thread is being detected implicitly
Looper.prepare();
Log.i(TAG, "DownloadThread entering the loop");
// now, the handler will automatically bind to the
// Looper that is attached to the current thread
// You don't need to specify the Looper explicitly
handler = new Handler();
// After the following line the thread will start
// running the message loop and will not normally
// exit the loop unless a problem happens or you
// quit() the looper (see below)
Looper.loop();
Log.i(TAG, "DownloadThread exiting gracefully");
} catch (Throwable t) {
Log.e(TAG, "DownloadThread halted due to an error", t);
}
}
答案 1 :(得分:0)
Android Looper是Android用户界面中的一个Java类,它与Handler类一起处理UI事件,如按钮点击,屏幕重绘和方向切换。它们还可用于将内容上载到HTTP服务,调整图像大小和执行远程请求。
http://developer.android.com/reference/android/os/Looper.html