如何在android中强制执行asynctask

时间:2014-09-27 10:53:06

标签: android multithreading android-asynctask

我遇到了一个问题,我在另一个Asynctask中调用了一个新的Asynctask,结果是当调用时 第二个Asynctask,线程被阻塞,怎么能强制运行Asynctask?感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过在AsyncTask#1中实现一个接口并向执行它的活动添加一个回调例程来解决这个问题。像

这样的东西

MyAsyncTask.java

public class MyAsyncTask extends AsyncTask<Void, Void, Void> {

    public interface OnTaskCompletedListener {
        void onTaskCompleted();
    }

    private Activity mActivity;

    public MyAsyncTask(Activity activity) {
        mActivity = activity;
    }

    public void attach(Activity activity) {
        mActivity = activity;
    }

    public void detach() {
        mActivity = null;
    }

    @Override
    protected void onPostExecute(Void nothing) {
        if (mActivity != null) mActivity.onTaskCompleted();
    }
}

MyActivity.java

public class MyActivity extends Activity implements MyAsyncTask.OnTaskCompletedListener {

    private MyAsyncTask mTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (mTask!= null) {
            mTask.attach(this);
        } else {
            mTask = new MyAsyncTask(this).execute();
        }
    }

    @Override
    public void onStop() {
        if (mTask!= null)) mTask.detach();
        super.onStop();
    }

    @Override
    public void onTaskCompleted() {
        mTask = null;
        // execute another task from here
    }
}

在上面的示例中,包括attach()和detach()方法,用于处理方向或其他配置更改时的活动重新创建。在AsyncTask中可以省略它作为内部类实现。

主要思想:AsyncTask完成并将执行传递给活动中的回调例程。任何东西都可以在onTaskCompleted()中执行 - 再次调用不同或相同的AsyncTask