我做了很多研究,但我没有通过它,所以我不知道如何实现我的应用程序。该应用程序包含2个以上的活动,其中包含内容,应由后台服务进行更新。所以我不知道如何进行连接,有人说我应该做ipc,但是其他人说这太多了,只要服务和活动在同一个进程中运行。我担心轻松创建像ActivityOne.RefreshData(数据数据)这样的方法并调用服务中的那些方法,但直到现在我才设法让它工作。我希望你对我有一些建议,抱歉我的英语不好!
欢呼声
答案 0 :(得分:1)
如果您只需要为自己的活动提供数据/更新,那么肯定不需要IPC。
为了达到这个目的,我会颠倒你似乎在描述的方向,而不是在活动上使用服务调用方法,让它将消息推送到Activity活动时提供给它的Handler,如果它启动的话。
请参阅: http://developer.android.com/reference/android/os/Handler.html
http://mobileorchard.com/android-app-developmentthreading-part-1-handlers/
请注意,如果您需要从服务发送到activites的内容始终是相同类型的对象,则可以通过使用Message.obj字段来保存您的类型来简化handleMessage()的实现,而不必使用Bundles或瓜分。如:
处理程序impl in活动,其中NotificationModel是服务始终发送的类型:
private Handler mNotificationListener = new Handler(){
@Override
public void handleMessage(Message msg) {
handleIncomingNotification((NotificationModel)msg.obj);
}
};
将msgs发布到此处理程序的服务端如下所示:
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);
}
}
}