2012-01-31 3 views
1

나는 안드로이드에 다음 엔티티를 만들었습니다 -안드로이드 서비스가 다시 시작될 때 원격 객체를 처리하는 방법은 무엇입니까?

  1. 안드로이드이면 MyService (APK)
  2. MyServiceClient (항아리)
  3. 에서는 MyApplication이 (MyServiceClient를 통해이면 MyService를 사용) IPC를 들어

I AIDL을 사용했습니다. 샘플 구현 (서비스 클라이언트)이 아래에 나와 있습니다.

AIDL 인터페이스 - ICLAZZ.aidl (서비스 측에서 구현하고, 서비스와 IPC를 위해 내부적으로 사용) 서비스 클라이언트 측 - CLAZZ.java (개발자에 노출 API)

ICLAZZ.aidl

API를 사용자가 CLAZZ.getInstance()를 호출하면
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(); 
    } 
}; 

, 나는 원격 객체 채소를 생성 nce를 생성하고이를 CLAZZ의 로컬 객체에 저장하고 CLAZZ 객체를 사용자에게 반환합니다.

내가 직면 한 문제는 서비스가 다시 시작되는 경우 모든 이전 원격 개체가 무효화된다는 것입니다. 그러나 API 사용자가 이전에 생성 한 CLAZZ 객체를 저장했을 수 있으며 일부 기능을 호출 할 수 있습니다. 이로 인해 응용 프로그램이 실패하게됩니다. 또한, 응용 프로그램에서 만든 API 개체의 전체 목록을 유지하고 싶지 않습니다. 주어진 시나리오에서이 상황을 정상적으로 처리하고 기존 개체를 복구 할 수있는 메커니즘이 있습니까?

답변

0

표준 Java에서 RMI와 동일한 문제가 발생합니다.

원격 개체가 실패하면 단순히 원격 개체 (Android에서 바인딩)를 서비스에서 가져옵니다.

ed