如何暂停执行直到听众完成?
How to pause execution until listener finished?
如何以 pause()
停止代码执行(阻止 proceedFurther()
执行)直到 resume()
被调用的方式实现 pause()
和 resume()
点击 button
?
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resume();
}
});
pause();
proceedFurther();
据我所知,OnClickListener 创建了一个单独的线程,主线程必须以某种方式停止,并发性的东西我不知道。
是在主 UI 线程上调用的结果 onClick() 函数。
如果您想在后台执行某些操作,请使用 AnsycTask。
您的假设是错误的 - 单击侦听器中的代码在 UI 线程中执行。
因此,为了更好地定义任务 - 您不想确保仅在执行 resume() 之后才调用 proceedFurther()。
有两种实现方法:
如果您不需要后台处理 - 恢复不会触及数据库或网络,或其他潜在的内存 - 繁重且耗时的东西,您可以只在回调:
public void onClick(View v) {
resume();
proceedFurther();
}
如果确实需要在后台线程中执行resume(),确实可以使用AsyncTask。您只需要在 doInBackground() 中调用 resume() 并在 onPostExecute() 中调用 proceedFurther()。
如何以 pause()
停止代码执行(阻止 proceedFurther()
执行)直到 resume()
被调用的方式实现 pause()
和 resume()
点击 button
?
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resume();
}
});
pause();
proceedFurther();
据我所知,OnClickListener 创建了一个单独的线程,主线程必须以某种方式停止,并发性的东西我不知道。
是在主 UI 线程上调用的结果 onClick() 函数。
如果您想在后台执行某些操作,请使用 AnsycTask。
您的假设是错误的 - 单击侦听器中的代码在 UI 线程中执行。
因此,为了更好地定义任务 - 您不想确保仅在执行 resume() 之后才调用 proceedFurther()。
有两种实现方法:
如果您不需要后台处理 - 恢复不会触及数据库或网络,或其他潜在的内存 - 繁重且耗时的东西,您可以只在回调:
public void onClick(View v) { resume(); proceedFurther(); }
如果确实需要在后台线程中执行resume(),确实可以使用AsyncTask。您只需要在 doInBackground() 中调用 resume() 并在 onPostExecute() 中调用 proceedFurther()。