Когда действие переходит в состояние паузы, вызывается метод onPause()
, а затем вызывается метод unregisterReceiver(mReceiver)
в onPause()
.
Пример:
// in the Activity class
@Override
protected void onPause() {
Log.d("called", "onPause");
super.onPause();
SearchFileService.PauseSearching = true;
unregisterReceiver(mReceiver);
}
// in the Service class
public class SearchFileService extends Service {
public static Boolean PauseSearching = false;
public void run(){
...
while(!searchingStack.isEmpty()){
while(PauseSearching){};// infinite loop to pause execution
// to start search operations
}//while
}//run
}//service
Только ресивер не слушает трансляцию, но служба продолжает работать, когда вызывается onPause()
. В моем примере я создал новую ветку на сервисе для поиска определенных файлов. Когда действие приостановлено, поиск продолжается. Я попробовал следующий подход, но он неэффективен.
Я добавляю эту строку while(PauseSearching){};
к функции поиска, и когда вызывается onPause
, переменная PauseSearching
устанавливается равной true
. Таким образом, код входит в бесконечный цикл, приостанавливая выполнение потока.
Вопросы:
Существуют ли какие-либо подходы для приостановки потока, работающего в службе, когда активность находится в состоянии onPause
?
Я думаю, что первый подход очень неэффективен, странно ли использовать бесконечный цикл для приостановки выполнения?
Wait
, notify
и synchronization
. Затем я пытаюсь добавить метод wait()
и notify()
для синхронизации выполнения. Но я не знаю, что мне писать в методе onPause()
и куда ставить wait()
, notify()
и syncrhozied
.
Любой совет приветствуется. :))))) Спасибо.