0

たくさん調べてみましたが、うまくいきませんでしたので、どうやってアプリを実現するのかわかりません。アプリは、バックグラウンドでサービスによって更新される必要があるコンテンツを含む2つ以上のアクティビティで構成されています。そのため、接続の方法がわかりません。ipcを実行する必要があると言う人もいれば、サービスとアクティビティが同じプロセス内で実行されている限り、作業が多すぎると言う人もいます。ActivityOne.RefreshData(Data data)のようなメソッドを簡単に作成し、サービス内でそれらを呼び出すことに関心がありましたが、今までそれを機能させることができませんでした。私にいくつかの提案があり、私の悪い英語をお詫びすることを願っています!

乾杯

4

1 に答える 1

1

自分のアクティビティにデータ/更新を提供するだけでよい場合は、IPCは必要ありません。

これを実現するために、私はあなたが説明しているように見える方向を逆にし、アクティビティでメソッドを呼び出すサービスではなく、アクティビティが開始したとき/開始した場合に、アクティビティによって提供されたハンドラーにメッセージをプッシュします。

参照: http ://developer.android.com/reference/android/os/Handler.html

http://mobileorchard.com/android-app-developmentthreading-part-1-handlers/

サービスからアクティビティに送信する必要があるものが常に同じタイプのオブジェクトである場合は、Message.objフィールドを使用してタイプを保持し、バンドルやパーセルに煩わされることなく、handleMessage()の実装を簡素化できることに注意してください。のように:

NotificationModelがサービスが常に送信するタイプであるアクティビティのハンドラーimpl:

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);
    }
    }
}
于 2012-08-25T16:17:22.230 に答える