当我们在主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()...
?
答案 0 :(得分:4)
handleMessage()
正在调用Looper
。您可以看到here looper在消息目标上调用dispatchMessage,这是Handler。当您在处理程序中post a message时,目标将被分配this
引用。所以流程如下:
您在处理程序上发布消息,在内部创建一个Message对象,并引用其处理程序。
将该消息放入由主UI管理的消息队列中(在此特定情况下)
当时机成熟时,Android正在从队列中删除你的消息并使用其目标字段 - 在其上调用handleMesage。
另外 - 重要的是,如果在创建Handler时没有指定特定的Looper,则默认的Looper用于实例化它的线程。在你的情况下,它的主UI Looper。
答案 1 :(得分:0)
您只需致电h.sendEmptyMessage()