Я создал следующие объекты в Android: -
- Android MyService (apk)
- MyServiceClient (jar)
- MyApplication (использует MyService через MyServiceClient)
Для 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, созданных приложением.В данном сценарии есть какой-то механизм, с помощью которого я могу изящно справиться с этой ситуацией и обеспечить восстановление существующих объектов.