1

私はAndroidで次のエンティティを作成しました:-

  1. Android MyService(apk)
  2. MyServiceClient(jar)
  3. MyApplication(MyServiceClientを介してMyServiceを使用)

IPCには、AIDLを使用しました。(サービスクライアントの)実装例を以下に示します。

AIDLインターフェース-ICLAZZ.aidl(サービス側で実装され、サービス付きのIPCで内部的に使用されます)サービスクライアント側-CLAZZ.java(開発者に公開されるAPI)

ICLAZZ.aidl

interface ICLAZZ {
 void doSomething();
}

CLAZZ.java

public class CLAZZ 
{
  private ICLAZZ mSvcInstance; //remote object


  // static method, instead of constructor for object creation due to some reason


  public static synchronized CLAZZ getInstance(inputParam) 
  {
  // ICLAZZ remoteObject = get the remote object from service

  if(remoteObject!=null) {
    INSTANCE = new INSTANCE(inputParam);
    INSTANCE.mSvcInstance = remoteObject;
   }

   return INSTANCE;

  }

  private CLAZZ() {
  }


  private CLAZZ(inputParam) {
   // initialize based on inputParam
  }

  public void doSomething() {
   if(mSvcInstance!=null)
     mSvcInstance.doSomething();
  }
};

APIユーザーがCLAZZ.getInstance()を呼び出すと、リモートオブジェクトインスタンスを作成してCLAZZのローカルオブジェクトに保存し、CLAZZオブジェクトをユーザーに返します。

私が直面している問題は、サービスが再起動した場合、以前のすべてのリモートオブジェクトが無効になることです。ただし、APIユーザーは、以前に作成したCLAZZオブジェクトを保存していて、そのオブジェクトでいくつかの機能を呼び出したい場合があります。これにより、アプリケーションが失敗します。また、アプリケーションによって作成されたAPIオブジェクトのグローバルリストを保持したくありません。与えられたシナリオでは、この状況を適切に処理し、既存のオブジェクトの回復を提供できるメカニズムがありますか。

4

1 に答える 1

0

標準 Java の RMI と同じ問題のように思えます。

リモート オブジェクトが失敗した場合は、サービスから新しいリモート オブジェクト (Android ではバインド) を取得するだけです。

エド

于 2012-01-31T14:52:42.580 に答える