나는 안드로이드에 다음 엔티티를 만들었습니다 -안드로이드 서비스가 다시 시작될 때 원격 객체를 처리하는 방법은 무엇입니까?
- 안드로이드이면 MyService (APK)
- MyServiceClient (항아리)
- 에서는 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 개체의 전체 목록을 유지하고 싶지 않습니다. 주어진 시나리오에서이 상황을 정상적으로 처리하고 기존 개체를 복구 할 수있는 메커니즘이 있습니까?