2012-04-06 9 views
1

Мне нужно остановить пару служб непосредственно перед удалением базы данных. Службы получают доступ к базе данных, и если они не будут остановлены, приложение выйдет из строя.Могу ли я остановить службу синхронно?

Как так:

stopService(new Intent(CurrentClass.this, FirstService.class)); 
stopService(new Intent(CurrentClass.this, SecondService.class)); 
CurrentClass.this.deleteDatabase(MyDatabaseHelper.DATABASE_NAME); 

Насколько я знаю, проблема в том, что StopService является асинхронным. Как заставить мои службы останавливаться до удаления моей базы данных?

Спасибо!

ответ

2

Насколько я знаю, точное время разрушения службы до Android и не может быть немедленным ... так что помните об этом ... я думаю, что лучше, чтобы вы зарегистрировали свою услугу, если ваша база данных доступна .., а затем получить доступ к нему ... если вы думаете .. вы не должны делать эту проверку, если Databse доступен, всегда на службе ... тогда перед вызовом

stopService(new Intent(CurrentClass.this, FirstService.class)); 
stopService(new Intent(CurrentClass.this, SecondService.class)); 

транслирует намерение, чтобы служба была остановлена ​​и в вашем сервисе реализована функция прослушивания, а в процессе приема этого слушателя запускается метод проверки доступности базы данных ... например .. например,

//this is in your service.. 
bool stopping=false 
....... 

if(stopping) 
    { 
    //check if your databse is available and access it 
    } 
else{ 
    //access your database directly.. 
    } 

и OnReceive вашего радиовещательного приемника

@Override 
    public void onReceive(Context context, Intent intent){ 
    stopping=true; 
    } 
+0

Я получил его на работу, используя эту идею немного более просто. Я просто проверяю, открыта ли моя база данных, прежде чем я получаю доступ к ней в критическом месте, которое сработало для меня. – Brianide

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