0

別の AsyncTask 内で AsyncTask を開始したいと考えています。最初の AsyncTask の「onPostExecute」で 2 番目の AsyncTask を開始することで、これを実行しようとしています。その結果、最初の AsyncTask が終了した後に 2 番目の AsyncTask が開始されます。どうすればこれを解決できますか?

ありがとうございました

ここにコードがあります

private class Parse extends AsyncTask<Void, Void, Void>{
    Document doc = null;
    Element son = null;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            doc = Jsoup.connect("MY_URL").get();
            son= doc.body();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

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

        for(CONDITION){
            //MY_CODE

            new DownloadImageTask().execute();

        }
    }
}

これは 2 番目の AsyncTask です

private class DownloadImageTask extends AsyncTask<String, Void, String> {

    Bitmap bitmap;
    ImageView image = new ImageView(Events.this);

    @Override
    protected void onPreExecute() {
    };

    protected String doInBackground(String... urls) {
    try {
        URL url = new URL("MY_URL");
        bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
        return null;
}
4

1 に答える 1

1

まず、公式ドキュメントを参照して、AsyncTask についてよく理解してください: http://developer.android.com/reference/android/os/AsyncTask.html

onPostExecute は、バックグラウンド タスクが終了した後、メイン スレッドで実行されます。このメソッドは、UI スレッドと通信して実行を処理するために使用するように設計されています。

バックグラウンド コードで 2 番目の AsyncTask を実行する場合、または開始直後に実行する場合は、doInBackground メソッドでこれを行う必要があります。

于 2013-10-03T21:33:08.343 に答える