【Android开发】消息处理类(Handler)与消息类(Message)介绍
生活随笔
收集整理的這篇文章主要介紹了
【Android开发】消息处理类(Handler)与消息类(Message)介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.消息處理類(Handler)簡介
消息處理類Handler允許發送和處理Message或Runnable對象到其所在線程的MessageQueue中。Handler主要有一下兩個作用:
1.將Message或Runnable應用post()或sandMessage()方法發送到MessageQueue中,在發送時可以指定延遲時間、發送時間以及要攜帶的Bundle數據。當MessageQueue循環到該Message時,調用相應的Handler對象的handlerMessage()方法對其進行處理。
2.在子線程中與主線程進行通信,也就是在工作線程中與UI線程進行通信。
*在一個線程中,只能有一個Looper和MessageQueue,但是可以有多個Handler,而且這些Handler可以共享一個Looper和MessageQueue。
Handler類提供的發送和處理消息的常用方法如下表:
void handleMessage(Message msg):處理消息的方法,該方法通常用于被重寫。 final boolean hasMessage(int what):檢查消息隊列是否包含what屬性指定值的消息。 final boolean hasMessage(int what,Object object):檢查消息隊列中是否包含what屬性為指定且object屬性為指定指定對象的消息。 Message obtainMessage():獲取消息。 sendEmptyMessage(int what):發送空消息。 final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之后發送空消息。 final boolean sendMessage(Message msg):立即發送消息。 final boolean sendMessageAtTime(Message msg,long uptimeMillis):定時發送消息。 final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后發送消息。
二.消息類(Message)簡介
消息類(Message)被存放在MessageQueue中,一個MessageQueue中可以包含多個Message對象,每個Message對象可以通過Message.obtain()或Handler.obtainMessage()方法獲得。一個Message對象有如下5個屬性:
arg1 int類型 用來存放整型數據 arg2 int類型 用來存放整型數據 what int類型 用來保存消息標示 obj Object類型 是Object類型的任意對象 replyTo Messager類型 用來指定此Message發送到何處的可選Message對象
*使用Message類的屬性可以攜帶int類型數據,如果要攜帶其他類型的數據,可以先將要攜帶的數據保存到Bundle中對象中,然后通過Message類的setData()方法將其添加到Message中。
如:
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putInt("int", 1);
bundle.putBoolean("boolean", false);
bundle.putByte("byte", (Byte) null);
bundle.putChar("char",'a');
bundle.putCharSequence("Stirng","Hello World");
bundle.putFloat("float", 12.3f);
bundle.putString("String", "Hello World");
bundle.putDouble("double", 12.3);
msg.setData(bundle);
總之,Message類的使用方法比較簡單,在使用時,需注意以下3點:
a.盡管Message有public的默認構造方法,但是通常情況下,需要使用Message.obtaion()或Handler.obtainMessage()方法來從消息池中獲得空消息對象,以節省資源。
b.如果一個Message只需要攜帶簡單的int型信息,應優先使用Message.arg1和Message.arg2屬性來傳遞信息,這比用Bundle更節省內存。
消息處理類Handler允許發送和處理Message或Runnable對象到其所在線程的MessageQueue中。Handler主要有一下兩個作用:
1.將Message或Runnable應用post()或sandMessage()方法發送到MessageQueue中,在發送時可以指定延遲時間、發送時間以及要攜帶的Bundle數據。當MessageQueue循環到該Message時,調用相應的Handler對象的handlerMessage()方法對其進行處理。
2.在子線程中與主線程進行通信,也就是在工作線程中與UI線程進行通信。
*在一個線程中,只能有一個Looper和MessageQueue,但是可以有多個Handler,而且這些Handler可以共享一個Looper和MessageQueue。
Handler類提供的發送和處理消息的常用方法如下表:
void handleMessage(Message msg):處理消息的方法,該方法通常用于被重寫。 final boolean hasMessage(int what):檢查消息隊列是否包含what屬性指定值的消息。 final boolean hasMessage(int what,Object object):檢查消息隊列中是否包含what屬性為指定且object屬性為指定指定對象的消息。 Message obtainMessage():獲取消息。 sendEmptyMessage(int what):發送空消息。 final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之后發送空消息。 final boolean sendMessage(Message msg):立即發送消息。 final boolean sendMessageAtTime(Message msg,long uptimeMillis):定時發送消息。 final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后發送消息。
二.消息類(Message)簡介
消息類(Message)被存放在MessageQueue中,一個MessageQueue中可以包含多個Message對象,每個Message對象可以通過Message.obtain()或Handler.obtainMessage()方法獲得。一個Message對象有如下5個屬性:
arg1 int類型 用來存放整型數據 arg2 int類型 用來存放整型數據 what int類型 用來保存消息標示 obj Object類型 是Object類型的任意對象 replyTo Messager類型 用來指定此Message發送到何處的可選Message對象
*使用Message類的屬性可以攜帶int類型數據,如果要攜帶其他類型的數據,可以先將要攜帶的數據保存到Bundle中對象中,然后通過Message類的setData()方法將其添加到Message中。
如:
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putInt("int", 1);
bundle.putBoolean("boolean", false);
bundle.putByte("byte", (Byte) null);
bundle.putChar("char",'a');
bundle.putCharSequence("Stirng","Hello World");
bundle.putFloat("float", 12.3f);
bundle.putString("String", "Hello World");
bundle.putDouble("double", 12.3);
msg.setData(bundle);
總之,Message類的使用方法比較簡單,在使用時,需注意以下3點:
a.盡管Message有public的默認構造方法,但是通常情況下,需要使用Message.obtaion()或Handler.obtainMessage()方法來從消息池中獲得空消息對象,以節省資源。
b.如果一個Message只需要攜帶簡單的int型信息,應優先使用Message.arg1和Message.arg2屬性來傳遞信息,這比用Bundle更節省內存。
c.盡可能使用Message.what來標識信息,以便用不同方式處理Massage。
轉載請注明出處:http://blog.csdn.net/acmman/article/details/46358991
總結
以上是生活随笔為你收集整理的【Android开发】消息处理类(Handler)与消息类(Message)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20135337朱荟潼——实验三
- 下一篇: Android自动化测试之MonkeyR