2012-01-31 29 views
1

我已經在Android中創建下列實體: -如何在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(),I創建一個遠程對象斯塔nce並將其保存在CLAZZ的本地對象中,並將CLAZZ對象返回給用戶。

我面臨的問題是,如果服務重新啓動,所有以前的遠程對象都會失效。但是,API用戶可能已經保存了先前創建的CLAZZ對象,並且可能想要調用它的某些功能。這會導致應用程序失敗。另外,我不想保留應用程序創建的API對象的全局列表。在給定的情況下,是否有一些機制可以通過這種機制優雅地處理這種情況,併爲現有對象提供恢復。

回答

0

聽起來像在標準Java上與RMI相同的問題。

當遠程對象失敗時,只需從服務中獲取新的遠程對象(綁定在Android上)。

Ed