Как обрабатывать удаленные объекты при перезапуске службы Android? - PullRequest
1 голос
/ 31 января 2012

Я создал следующие объекты в Android: -

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

1 Ответ

0 голосов
/ 31 января 2012

Похоже на ту же проблему, что и в RMI на стандартной Java.

Когда удаленный объект выходит из строя, просто получите новый удаленный объект (Bind на Android) из службы.

Ed

...