2016-01-21 137 views
1

当我们在主UI线程中实例化一个Handler对象(对于此示例,可以说我正在使用匿名内部类)。Android处理程序handleMessage()方法调用

Handler h = new Handler() { 
    @override 
    public void handleMessage (Message msg) { 
     /* Code to handle the message */ 
    } 
}; 

我们可以只通过这Handler对象引用到其他线程谁可以发布状态更新来使用这个参考(h.sendMessage())UI线程。

怀疑:我们没有提供我们的定制匿名类参考hHandler任何地方的Activity类或UI线程。为了调用重写的方法,UI线程必须具有对我们类的对象引用。那么如何调用被覆盖的handleMessage()而不是默认的?

+1

我不最后一段理解。你能用不同的方式描述它吗? –

+0

我相信这两个工作主线程,并可以访问方法和变量。 – Rohit5k2

+0

@DominikSuszczewicz修改了一些陈述。请现在试试 –

回答

4

您的handleMessage()正在由Looper调用。你可以看到here这个looper在消息目标上调用dispatchMessage,它是一个Handler。当您的post a message内部处理程序正在分配目标this。因此,流程如下:

  1. 您发布一条消息在您的处理程序,在内部它会创建一个Message对象有其处理程序的引用。

  2. 该消息放置到被主界面管理的消息队列thred(在这种特殊情况下)

  3. 当时间到来的时候,Android是从队列中移除你的消息,并使用其目标字段 - 电话handleMesage在上面。

此外 - 什么重要的是,如果你不指定特定的Looper创建处理程序时,则默认活套用于它被实例化的线程。在你的情况下,它的主要UI Looper。

0

您只需调用h.sendEmptyMessage()