1
我已經在Android中創建下列實體: -如何在android服務重啓時處理遠程對象?
- 的Android則將MyService(APK)
- MyServiceClient(JAR)
- 所有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對象的全局列表。在給定的情況下,是否有一些機制可以通過這種機制優雅地處理這種情況,併爲現有對象提供恢復。