我的Android应用程序的结构是什么?

时间:2012-08-25 15:55:54

标签: android service android-activity communication

我做了很多研究,但我没有通过它,所以我不知道如何实现我的应用程序。该应用程序包含2个以上的活动,其中包含内容,应由后台服务进行更新。所以我不知道如何进行连接,有人说我应该做ipc,但是其他人说这太多了,只要服务和活动在同一个进程中运行。我担心轻松创建像ActivityOne.RefreshData(数据数据)这样的方法并调用服务中的那些方法,但直到现在我才设法让它工作。我希望你对我有一些建议,抱歉我的英语不好!

欢呼声

1 个答案:

答案 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);
    }
    }
}