如何在侦听器完成之前暂停执行?

时间:2015-07-23 10:06:54

标签: java android multithreading concurrency java.util.concurrent

如何以pause()停止代码执行(阻止resume()执行)的方式实现pause()proceedFurther(),直到resume()被调用为止button

button.setOnClickListener(new View.OnClickListener() {
    @Override
     public void onClick(View v) {
         resume();
     }
});
pause();
proceedFurther();

据我所知,OnClickListener创建了一个separeate线程,并且必须以某种方式停止主线程并使用我不知道的并发内容。

2 个答案:

答案 0 :(得分:1)

您的假设是错误的 - 单击侦听器中的代码在UI线程中执行。

因此,为了更好地定义任务,您不必确保仅在执行resume()之后调用proceedFurther()。

他们有两种方法可以做到这一点:

  • 如果您不需要后台处理 - 恢复不会触及数据库或网络,或者其他潜在的内存耗费大量时间,您可以在回调:

    public void onClick(View v) {
        resume();
        proceedFurther();
    }
    
  • 如果确实需要在后台线程中执行resume(),您确实可以使用AsyncTask。你只需要在doInBackground()中调用resume()并在onPostExecute()中调用proceedFurther()。

答案 1 :(得分:0)

是否在主UI线程上调用了生成的onClick()函数。

如果你想在后台使用AnsycTask。