AsyncTask-如何在没有结果回调的情况下汇集异步调用

时间:2015-01-22 23:42:32

标签: java android multithreading android-asynctask


以下活动有两个并行运行的异步任务。   问题是:当'bar'AsyncTask运行时,活动成员调用其方法myExec.startSomething()并在后台运行。它根据成功或失败触发回调,并且侦听器方法在activity类中实现。如何将侦听器回调结果汇集到活动类,因为它在单独的线程中运行? 例如:调用listener.onFail()而不是onSomething()。我在活动中拥有所有监听器方法。我需要沿着回调漏斗。

感谢 〜


public class MyExecutor {


 public void startSomething() {
    listener.doSomething();
 }

}

public class MyActivity extends Activity implements FooListener {

private MyExecutor myExec;
  @Override
   protected void onCreate(Bundle savedInstanceState) {
    myExec = mApp.getProvisionExecutor();
    myExec.addListener(this);
 ...
   }

 @Override
 protected void onResume() {
   super.onResume();

   if (myExec.isSomethingorOther() ) {

        (bar = new AsyncTask<Void, String, String>() {
            @Override
            protected String doInBackground(Void... params) {
                myExec.startSomething(null);
                ---->>>>>//startSomething triggers onSomething callback
                 ------>>> in myExecutor class
                return null;

            }
        }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
    }

    if (!foobar && isReady()) {


        (new AsyncTask<Void, String, String>() {

            @Override
            protected String doInBackground(Void... params) {
                return SomethingGood());
            }

            protected void onPostExecute(String result) {
                if (null != result) {
                    poncho.setColor(result);
                }

               ...
            }

        }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);

}

//listener methods 
@Override
public void onSomething() {
  //am I reached this way or do I need to pass back a callback result
  doSomethingGreat();

}
....
private void doSomethingGreat() {
 //
 }

 ...
  }

1 个答案:

答案 0 :(得分:0)

如果你想在bar线程停止时进入UI线程,请在onPostExecute()中实现它。