010_Handler 翻译学习

来源:互联网 发布:蛇形矩阵 编辑:程序博客网 时间:2024/05/14 17:44

Handler

官方:http://developer.android.com/reference/android/os/Handler.html

相关博客:http://www.cnblogs.com/bastard/archive/2012/06/08/2541944.html  讲解Handler、Looper、MessageQueue之间的关系。

类信息:public class Handler extends Object

直接子类:AsyncQueryHandler, AsyncQueryHandler.WorkerHandler, HttpAuthHandler,SslErrorHandler

简介:Handler关联到一个线程的MessageQueue队列实现了发送和处理Message消息与Runable对象。每一个Hnadler实例都被关联到一个单独的线程的消息队列。当创建一个新的Handler时,它就绑定到创建这个Handler对象语句所在线程的消息队列中,它会将消息和runable对象传递到绑定的消息队列中。

Handler的两个用处:1、安排message与runable对象定时执行;2、入队一个操作在不同的线程中执行(这里一般是将子线程结果发送给主线程以完成操作)。

根据Handler的两个作用,可以将Handler所具有的方法分为两类:

Ø  Post:Post类的方法允许把Runable对象入队到消息队列中。它的方法有:post(Runnable)、postAtTime(Runnable,long)、postDelayed(Runnable,long)。

Ø  sendMessage:sendMessage允许把一个包含消息数据的Message对象发送到Handler的handleMessage(Message)方法中执行(子类需要重写这个方法)。它的方法有:sendEmptyMessage(int)、sendMessage(Message)、sendMessageAtTime(Message,long)、sendMessageDelayed(Message,long)。

当一个应用进程创建时,它的主线程用来管理窗体。子线程可以通过Handler的Post类或者sendMessage类的方法与主线程通信。给定的Runable对象与Message消息将在Handler的消息队列中并在合适的时候执行。

翻译:

内部类: interface  Handler.Callback  当不希望实现Handler子类时可以使用这个Callback接口。

构造函数:

1)        Handler()

默认的构造器,它将关联到当前线程的Looper队列中。如果当前线程没有一个Looper对象,那么这个handler将无法收到消息,并将抛出异常。

2)        Handler(Handler.Callbackcallback)

将handler关联到当前线程的Looper队列中,并通过callback回调处理消息。如果当前线程没有一个Looper对象,那么这个handler将无法收到消息,并将抛出异常。

3)        Handler(Looper looper)

将handler关联到给定的looper队列中。

4)        Handler(Looper looper,Handler.Callback callback)

将handler关联到给定的looper队列中,并通过callback回调处理消息。

公共方法:

1、  public void dispatchMessage (Message msg)

处理系统消息。

2、  public final void dump (Printer pw, String prefix)

3、  public final Looper getLooper ()

4、  public String getMessageName (Message message)   add in android 4.0

返回指定message对象的名称。默认的实现会返回callback的类名或则message的what属性的16进制。

5、  public void handleMessage (Message msg)

子类实现这个方法以处理msg。通常当有多个Message对象时,可以通过switch case进行区分处理。

6、  public final boolean hasMessages (int what, Object object)

判断消息队列中是否有what属性为‘what’且obj属性为‘object’的消息。

7、  public final boolean hasMessages (int what)

判断消息队列中是否有what属性为‘what’的消息。

8、  public final Message obtainMessage ()

从全局message池中返回一个Message对象。它是比创建和分配一个message对象更有效的方式。返回的这个message对象将会自动关联到它所在的实例,即Message.target == this。如果不希望使用这种便利的方法,可以使用Message.obtain()代替。

9、  public final Message obtainMessage (int what)

与obtainMessage ()相同,但是指定了what属性。

10、public final MessageobtainMessage (int what, int arg1, int arg2)

与obtainMessage ()相同,但是指定了what、arg1、arg2属性。

11、public final MessageobtainMessage (int what, int arg1, int arg2, Object obj)

与obtainMessage ()相同,但是指定了what、arg1、arg2、obj属性。

12、public final MessageobtainMessage (int what, Object obj)

与obtainMessage ()相同,但是指定了what、obj属性。

13、public final booleanpost (Runnable runnable)

将这个runable对象加入到消息队列中。这个runable对象将在Handler关联的线程上运行。

返回值:返回true,则这个runable对象成功加入到消息队列中;否则返回false,一般是因为处理消息队列的looper对象正在退出。

14、public final booleanpostAtFrontOfQueue (Runnable runnable)

将这个runnable加入到消息队列最前面,即它将成为下一个被执行的消息对象。这个方法只在特殊的时候使用,他容易引起意想不到的问题。

15、public final booleanpostAtTime (Runnable runnable, Object token, long uptimeMillis)

将这个runable对象加入到消息队列中,并在uptimeMillis指定的时间执行。uptimeMillis是基于uptimeMillis()方法的,它是指从开机到现在的毫秒数,但是并不包括设备睡眠的时间。token是对runable对象的标记。

返回值:返回true,则这个runable对象成功加入到消息队列中;否则返回false,一般是因为处理消息队列的looper对象正在退出。需要注意的是,即使返回true,也不代表这个runable会被执行,如果在runable执行前,looper退出,那么这个runable将会被销毁。

public finalboolean postAtTime (Runnable r, long uptimeMillis)类似。

16、public final booleanpostDelayed (Runnable r, long delayMillis)

将这个runable对象加入到消息队列中,并延时uptimeMillis时长执行。uptimeMillis是基于uptimeMillis()方法的,它是指从开机到现在的毫秒数,但是并不包括设备睡眠的时间。

17、public final voidremoveCallbacks (Runnable runnable)

移除已加入消息队列的runnable对象(这个对象可能被加入多次,这个方法将移除全部)。

18、public final voidremoveCallbacks (Runnable r, Object token)

移除一个已加入消息队列的标记为token的runnable对象。如果token为空值,则移除全部runable对象。

19、public final voidremoveCallbacksAndMessages (Object token)

移除标记为token的runable和message对象。如果token为空,则移除所有runable和message对象。

20、public final voidremoveMessages (int what)

按属性what移除message对象。

public finalvoid removeMessages (int what, Object object)

按属性what、object移除message对象。

21、public final booleansendEmptyMessage (int what)

发送一个message消息,这个消息对象只设定了属性what。

22、public final booleansendEmptyMessageAtTime (int what, long uptimeMillis)

在uptimeMillis指定的时间发送这个消息。

public booleansendMessageAtTime (Message msg, long uptimeMillis)类似。

23、public final booleansendEmptyMessageDelayed (int what, long delayMillis)

延时delayMillis时长发送这个message消息。

public finalboolean sendMessageDelayed (Message msg, long delayMillis)类似。

24、public final booleansendMessage (Message msg)

发送这个 msg对象到handler绑定的线程消息队列中。

25、public final booleansendMessageAtFrontOfQueue (Message msg)

在消息队列前面加入这个msg对象,即它将是下一个被执行的消息。

25、public StringtoString ()

     默认的实现返回 getClass().getName() + '@' + Integer.toHexString(hashCode())。子类在需要的时候可以覆盖这个方法。

0 0
原创粉丝点击