Android处理程序handleMessage()方法调用

时间:2016-01-21 08:48:50

标签: java android handler

当我们在主UI线程中实例化一个Handler对象(对于这个例子,假设我使用的是匿名内部类)。

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

我们可以将此Handler对象引用传递给其他可以使用此引用(h.sendMessage())将状态更新发布到UI线程的线程。

怀疑:我们没有在h类或UI线程的任何位置提供我们的自定义匿名类引用Handler Activity。为了调用重写方法,UI线程必须具有对我们类的对象引用。那么如何调用被覆盖的handleMessage()而不是默认的//---------------------------- // LINE 1 COMMENT // LINE 2 COMMENT //---------------------------- private void func()...

2 个答案:

答案 0 :(得分:4)

handleMessage()正在调用Looper。您可以看到here looper在消息目标上调用dispatchMessage,这是Handler。当您在处理程序中post a message时,目标将被分配this引用。所以流程如下:

  1. 您在处理程序上发布消息,在内部创建一个Message对象,并引用其处理程序。

  2. 将该消息放入由主UI管理的消息队列中(在此特定情况下)

  3. 当时机成熟时,Android正在从队列中删除你的消息并使用其目标字段 - 在其上调用handleMesage。

  4. 另外 - 重要的是,如果在创建Handler时没有指定特定的Looper,则默认的Looper用于实例化它的线程。在你的情况下,它的主UI Looper。

答案 1 :(得分:0)

您只需致电h.sendEmptyMessage()

即可