我做了很多研究,但我沒有通過它,所以我不知道如何實現我的應用程序。該應用程序包含2+內容的活動,應由後臺的服務更新。所以我不知道如何做連接,有人說我應該做ipc,但是其他人會說這太多工作,只要服務和活動在同一個過程中運行。我擔心可以輕鬆創建像ActivityOne.RefreshData(Data data)這樣的方法並調用服務中的那些方法,但是直到現在我還沒有設法實現它。我希望你對我有一些建議,並對我的壞英語感到抱歉!我的Android應用程序有哪些結構?
歡呼
我做了很多研究,但我沒有通過它,所以我不知道如何實現我的應用程序。該應用程序包含2+內容的活動,應由後臺的服務更新。所以我不知道如何做連接,有人說我應該做ipc,但是其他人會說這太多工作,只要服務和活動在同一個過程中運行。我擔心可以輕鬆創建像ActivityOne.RefreshData(Data data)這樣的方法並調用服務中的那些方法,但是直到現在我還沒有設法實現它。我希望你對我有一些建議,並對我的壞英語感到抱歉!我的Android應用程序有哪些結構?
歡呼
如果您只需要提供數據/更新到自己的活動,那麼肯定是不需要的IPC。
爲了達到這個目的,我會顛倒你似乎正在描述的方向,而不是讓活動上的服務調用方法,讓它將消息推送給Activity提供給它的Handler。
參見: http://developer.android.com/reference/android/os/Handler.html
http://mobileorchard.com/android-app-developmentthreading-part-1-handlers/
請注意,如果您需要從業務發送給activites什麼始終是同一類型的對象,你可以使用簡化的handleMessage()的實現Message.obj字段來保存你的類型,而不打擾Bundles或Parcelling。如:
處理器IMPL在活動,其中NotificationModel是服務始終發送類型:
private Handler mNotificationListener = new Handler(){
@Override
public void handleMessage(Message msg) {
handleIncomingNotification((NotificationModel)msg.obj);
}
};
張貼封郵件給這個處理程序的服務端是這樣的:
public class NotificationRouter {
private Application mContext;
private SparseArray<Handler> mListeners = new SparseArray<Handler>();
public NotificationRouter (Application app){
this.mContext = app;
}
public void registerListener(Handler handler){
mListeners.put(handler.hashCode(), handler);
}
public void unRegisterListener(Handler handler){
mListeners.remove(handler.hashCode());
}
public void post(NotificationModel notice){
Message m = new Message();
m.obj = notice;
for (int i = 0; i < mListeners.size(); i++){
Handler h = mListeners.valueAt(i);
h.sendMessage(m);
}
}
}
非常感謝,爲了您的答案,我將加入鏈接並希望獲得一些成功 – user1624722
我是否必須將處理程序從啓動服務的活動傳遞給通過Intent通過startService傳遞的服務? – user1624722
不,當你的Activity啓動服務時,它應該綁定到它,因此有一個引用來調用它的方法。所以在綁定/啓動服務之後,你的活動應該能夠從上面的例子中調用service.registerListener。 – mmeyer