我可以按顺序链接异步任务(在前一个asynctask完成之后启动一个)

adj*_*fac 16 java android android-asynctask

每次我执行一次操作httpRequest时,代码执行时屏幕似乎会被锁定几秒钟.因此,我曾经在一个单独的线程中AsyncTask做所有我的httpRequest东西,同时提出一个ProgressDialog用户知道正在发生的事情.

我最近遇到了以下情况:我的一个输入httpRequest取决于前一个httpRequest(+解析)操作的结果.我不能只是AsyncTask顺序地把两个s放在一起,因为Android将把它们放在两个线程中并启动第二个线程而不完成第一个线程.如果没有适当的输入(第一个结果httpRequest),我的第二个httpRequest将崩溃应用程序.

有没有办法我可以放入一个wait()强制第二个AsyncTask不要开始,直到第一个完成?

Awa*_*riq 11

前几天我也有同样的情况.我以这种方式解决了它:将您的活动的引用传递给异步类的构造函数并执行do in background函数.现在在post执行函数中,从异步类调用ur活动的公共方法再次执行任务...或者试试这个:

            if (asynclass.getStatus() == android.os.AsyncTask.Status.PENDING) {
                asynclass.execute();
            } else if (RF.getStatus() == android.os.AsyncTask.Status.FINISHED) {
                asynclass = new asyncclass();
                asynclass.execute();
            } else {
                Toast.maketoast(this, "Plz wait", 1).show();
            }
Run Code Online (Sandbox Code Playgroud)

干杯

  • +1是同意@Await,我们可以使用getStatus()方法获取任何AsyncTask的状态. (2认同)

Nik*_*tel 6

所以我认为(不确定),你需要在post执行方法上调用第二个asyncTask

protected void onPostExecute(final Void unused) {
            if (this.dialog.isShowing()) {
                this.dialog.dismiss();
                     new secTask().execute();
            }}
Run Code Online (Sandbox Code Playgroud)