Приостановить выполнение потока в службе, когда в действии вызывается onPause - PullRequest
0 голосов
/ 02 июля 2019

Когда действие переходит в состояние паузы, вызывается метод 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. Таким образом, код входит в бесконечный цикл, приостанавливая выполнение потока.

Вопросы:

  1. Существуют ли какие-либо подходы для приостановки потока, работающего в службе, когда активность находится в состоянии onPause?

  2. Я думаю, что первый подход очень неэффективен, странно ли использовать бесконечный цикл для приостановки выполнения?

  3. Wait, notify и synchronization. Затем я пытаюсь добавить метод wait() и notify() для синхронизации выполнения. Но я не знаю, что мне писать в методе onPause() и куда ставить wait(), notify() и syncrhozied.

Любой совет приветствуется. :))))) Спасибо.

...