Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中强制执行异步任务_Android_Multithreading_Android Asynctask - Fatal编程技术网

如何在android中强制执行异步任务

如何在android中强制执行异步任务,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,我遇到了一个问题,我在另一个Asynctask中调用了一个新的Asynctask,结果是当调用 第二个异步任务,线程被阻塞,如何强制运行异步任务?谢谢。您可以通过在AsyncTask 1中实现一个接口并向执行该接口的活动添加回调例程来解决此问题。差不多 MyAsyncTask.java public class MyAsyncTask extends AsyncTask<Void, Void, Void> { public interface OnTaskCompleted

我遇到了一个问题,我在另一个Asynctask中调用了一个新的Asynctask,结果是当调用
第二个异步任务,线程被阻塞,如何强制运行异步任务?谢谢。

您可以通过在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();
    }
}
在上面的示例中,包括附加和分离方法,用于处理方向或其他配置更改时的活动重新创建。在AsyncTask中可以省略它,因为它是作为内部类实现的。
主要思想:AsyncTask完成并将执行传递给活动中的回调例程。可以在onTaskCompleted内执行任何操作-再次调用不同或相同的AsyncTask

为什么从async启动async?仅在一个AsyncTask中执行。在第一个AsyncTask的onPostExecute中启动下一个AsyncTask。虽然这是非常好的代码,但对OP没有帮助,因为据我所知,他希望在doInBackground中启动其他AsyncTask。
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
    }
}