沒有一個默認。但是你可以讓自己的自定義類來做類似的事情。 我做了一個這樣的:
import java.util.ArrayList;
public class Handler extends Object{
ArrayList<Message> messages;
public Handler(){
messages = new ArrayList<>();
}
public final Message obtainMessage(int what, Object obj){
Message message = new Message(what, obj, this);
messages.add(message);
return message;
}
public final Message obtainMessage(int what){
Message message = new Message(what, this);
messages.add(message);
return message;
}
public void handleMessage(Message msg){
messages.remove(msg);
}
public final boolean hasMessages(){
return !messages.isEmpty();
}
}
那麼你就還需要一個自定義郵件類是這樣的:
public class Message extends Object{
int mWhat;
Object mObj;
Handler mTarget;
public Message(int what, Object obj){
mWhat = what;
mObj = obj;
}
public Message(int what, Object obj, Handler target){
mWhat = what;
mObj = obj;
mTarget = target;
}
public Message(int what, Handler target){
mWhat = what;
mTarget = target;
}
public Message(int what){
mWhat = what;
}
public void sendToTarget(){
mTarget.handleMessage(this);
}
}
您可以使用此處理從後臺線程到UI線程進行通信,而無需干擾UI線程太多。
,你會在Android中你可以使用這個類在完全同樣的方式: 首先,你在你的UI類創建一個實例:
final int MESSAGE_RECEIVED = 0;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.mWhat){
case MESSAGE_RECEIVED:
System.out.println("Message received.");
updateStatus("Message received.");
break;
}
}
};
然後你提供這個處理程序實例您的後臺線程:
mHandler.obtainMessage(0).sendToTarget();
:
Thread thread = new T1(handler);
thread.start();
而在去年,您的方式發送消息10
我在一個樣本applet程序上測試了這個方法,它看起來很完美。雖然我不是專家級的java程序員,但可能會有一些缺點,但我並沒有真正意識到。如果是這樣,我很樂意聽到一個有教養的解釋,爲什麼這不好。
希望這可以幫助別人。
注意:上述處理程序和消息類(我的代碼)不提供Android.Handler和Android.Message的完整功能。
'Handler'主要被設計爲允許後臺線程安排在主應用程序線程上完成工作(例如UI更新)。或者,引用[the documentation](http://developer.android.com/reference/android/os/Handler.html),「處理程序有兩個主要用途:(1)安排消息和可運行子程序作爲未來的某個點執行;以及(2)排隊要在不同於你自己的線程上執行的動作。「將Handler用於其他目的是很糟糕的做法。 – CommonsWare 2012-03-04 21:07:56
@CommonsWare感謝您的建議。我只想使用Handler中使用的機制(即我想通過'Foo'類重定向套接字消息,並在Main類中使用它)。 – 2012-03-04 21:17:44
大多數OO開發人員只需從'Foo'的實例調用'Main'方法。 – CommonsWare 2012-03-04 21:25:59