在活动中调用onPause时暂停服务上的线程执行

时间:2019-07-02 06:03:34

标签: java android multithreading synchronization android-service

活动进入暂停状态时,将调用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. Waitnotifysynchronization。然后,我尝试添加wait()notify()方法来同步执行。但是我不知道我应该在onPause()方法中写什么,应该在哪里放置wait()notify()syncrhozied

欢迎任何建议。 :)))))谢谢。

0 个答案:

没有答案