【问题标题】:Execute Code only after async task complete仅在异步任务完成后执行代码
【发布时间】:2012-10-31 16:36:50
【问题描述】:

我有以下三行代码。

Line 1 : GetBitMapFromURL gbmap = new GetBitMapFromURL();   //Obtain thumbnail bitmap
Line 2 : gbmap.execute(applicationThumbNailURL);
Line 3 : applicationThumbnailBitMap = gbmap.returnBitmap();

我希望只有在 GetBitMapFromURL 异步任务的 onPostExecute 执行后才执行第 3 行。

【问题讨论】:

  • 请解释原因。为什么不能放到 onPostExecute 回调中呢?
  • @Simon 我正在使用同一个异步任务来执行不同的任务。
  • 为什么不向AsyncTask 构造函数传递一个参数来确定它将执行的任务类型?然后您可以检查onPostExecute中参数的值,并有条件地执行位图的分配。

标签: android android-asynctask


【解决方案1】:

在 GetBitMapFromURL 中创建回调。

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

    private GetBitMapFromURLCallback mCallback = null;

    public WebService(GetBitMapFromURLCallback callback) {
        mCallback = callback;
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        // ...
    }

    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);

        if (mCallback != null) {
            mCallback.onGetBitMapFromURLComplete(this);
        }
    }

    public interface GetBitMapFromURLCallback {

        public void onGetBitMapFromURLComplete(GetBitMapFromURL getBitMapFromUrl);
    }
}

public class MyActivity extends Activity implements GetBitMapFromURLCallback {

    // ...

    public void onGetBitMapFromURLComplete(GetBitMapFromURL getBitMapFromUrl) {
        // This code will get called the moment the AsyncTask finishes
    }
}

并让你的activity实现这个回调和onGetBitMapFromURLComplete()

【讨论】:

  • 所以基本上你的意思是在 GetBitMapFromURLCallback 的实现中执行第 3 行
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多