我们什么时候应该在Android中使用Looper?

时间:2012-06-05 09:08:15

标签: android handlers looper

有人可以告诉我什么时候应该在处理程序中使用Looper吗?我有一个代码库,其中有多个线程和处理程序。但是并没有为所有人调用Looper.prepare()Looper.loop()

我怀疑是否需要looper来继续处理handleMessage方法中的消息?即使我们没有looper,当消息被发送到处理程序时,是否会调用handleMessage()? Looper在这里服务的另外一个目的是什么?

谢谢, Shamy

2 个答案:

答案 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