2013-07-29 2 views
0

У меня есть приложение, которое работает как фреймворк - другие приложения могут регистрировать PendingIntent с моим приложением, которое запускает их в какой-то момент в будущем. Я сохраняю PendingIntents в списке массивов в службе и затем повторяю их, чтобы вызвать. Чтобы зарегистрировать намерение, приложение вызывает «startService()» с PendingIntent, установленным в наборе намерений.Служба Android остановлена, как уведомлять приложения?

В какой-то момент моя служба закрывается - или, более конкретно, мой список массивов очищается (что может случиться только для Android, убивающего службу), и поэтому я теряю свои PendingIntents для зарегистрированных приложений.

Как я могу сохранить свою службу в живых или, более конкретно, оставить мои PendingItents потерянными? Я не хочу идти против системных механизмов Android и создавать хакерские усилия, я хотел бы знать, как Google считает, что это должно быть сделано.

ответ

0

Когда услуга будет убит, это OnDestroy() вызывается метод. Вы могли бы, вероятно, более-ездить метод OnDestroy() и сделать что-то вроде:

public void onDestroy(){ 
Intent intent = new Intent(); 
intent.setAction("SERVICESTOPPED"); 
sendBroadcast(intent); 
super.onDestroy(); 
} 

Есть BroadcastReceiver, что прислушивается к этому намерению и справиться с ситуацией, как и когда это происходит. В качестве альтернативы, в onstartCommand(), если вы укажете возвращаемое значение как START_STICKY, ОС перезапустит вашу службу, если она будет убита ОС. Как правило, это происходит при работе с длинными рядами

0

Вы пытались с START_STICKY?

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    // Put your code here 
    return START_STICKY; 
} 

Вы можете попробовать START_REDELIVER_INTENT

+0

У меня нет - но я попробую это. У меня создалось впечатление, что это не гарантирует, что сервис остался открытым, а скорее намеком на ОС, который он должен сделать? – justacodemonkey

Смежные вопросы