爲了記錄我我會回答我自己的問題,因爲它可能對其他人有用... (我使用常規服務,而不是IntentService,因爲它需要保持活動狀態)
對於從服務接收消息的活動,它必須將Handler實例化爲...
private Handler handler = new Handler()
{
public void handleMessage(Message message)
{
Object path = message.obj;
if (message.arg1 == 5 && path != null)
{
String myString = (String) message.obj;
Gson gson = new Gson();
MapPlot mapleg = gson.fromJson(myString, MapPlot.class);
String astr = "debug";
astr = astr + " ";
}
};
};
上面的代碼由我的調試東西組成。該服務將消息發送到活動,因爲...
MapPlot mapleg = new MapPlot();
mapleg.fromPoint = LastGeoPoint;
mapleg.toPoint = nextGeoPoint;
Gson gson = new Gson();
String jsonString = gson.toJson(mapleg); //convert the mapleg class to a json string
debugString = jsonString;
//send the string to the activity
Messenger messenger = (Messenger) extras.get("MESSENGER");
Message msg = Message.obtain(); //this gets an empty message object
msg.arg1 = 5;
msg.obj = jsonString;
try
{
messenger.send(msg);
}
catch (android.os.RemoteException e1)
{
Log.w(getClass().getName(), "Exception sending message", e1);
}
我剛剛選擇了數字5作爲消息標識符。在這種情況下,我將一個複雜的類傳遞給json字符串,然後在活動中重新構建它。
這是什麼附加功能? –
方法的問題在於,如果活動重新創建,您將失去接收響應的能力。廣播接收方式更好。有些人會建議你可以使處理程序靜態。我會說不,因爲那麼當用戶真正關閉活動時,您仍然會收到消息。 – user210504