2014-01-17 2 views
2

В моей Android проекта, у меня есть нормальный Service:OnDestroy() обратного вызова службы

public class MyService extends Service{ 
    @Override 
    public int onStartCommand(...){...} 

    ... 

    @Override 
    public void onDestroy() { 
    super.onDestroy(); 
    Log.d("MyApp","MyService onDestroy() is called!"); 
    } 
} 

В моем BroadcastReceiver классе, я останавливаюсь MyService & сделать еще одну задачу:

public static class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     context.stopService(new Intent(context, MyService.class)); 
     doAnotherTask(); 
    } 
} 

По моим log, onDestroy() из MyService выполнен после doAnotherTask().

Как я могу гарантировать, что onDestory() от MyService выполнен до doAnotherTask()?

P.S .: Я думал, что я мог бы сделать что-то вроде:

boolean isStopped = context.stopService(new Intent(context, MyService.class)); 
if(isStopped){ 
    doAnotherTask(); 
} 

Но это может быть возможно, что нет никакого обслуживания было начато, а это значит, stopService(...) ничего не делает. Поэтому я не могу полагаться на свой выше код.

+0

если onDestroy уже уничтожает его, то зачем вручную останавливать его? или если вам нужно остановить его, то почему внутри onDestroy()? – Saqib

+0

@ Сакиб, боюсь, вы не поняли мой вопрос правильно. Я называю stopService(), после которого я делаю NotherTask(), вот и все. Системные вызовы onDestroy() Я этого не сделал, я только stopService(). Но у меня есть что-то в onDestroy() обратном вызове. –

+0

Вы пробовали небольшую задержку между двумя задачами? – Saqib

ответ

0

вызова startActivityForResult() .... и после того, как вы получили onActivityResult, .... вызов методы doAnotherTask() я думаю, что будет делать эту работу

+0

Я не останавливаю свое служение в Управлении, я в классе BroadcastReceiver. Я обновил свой пост. –

0

Как насчет отправки специального намерения вашей трансляции приемник из функции onDestroy()? Когда ваш получатель получит его, затем вызовите doAnotherTask(). (Я предполагаю, что вы не можете просто называть doAnotherTask() напрямую из onDestroy().)

+0

Это не идеальное решение для меня, так как мой широковещательный приемник используется для получения намеренного вещания системы. Кроме того, невозможно зарегистрировать другой широковещательный приемник внутри существующего. –

+0

Но вы можете зарегистрировать приемник для нескольких действий, а затем проверить намерение.getAction() в onReceive(), чтобы определить, нужно ли выполнять обычную обработку или задачу очистки. Без дополнительной информации о том, что делает doAnotherTask(), я не могу предложить лучшие идеи. –

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