在AsyncTask的情况下,在doInBackground()方法之前调用onPostExecute()

考虑以下代码:

package com.reallybelievebig.asynctaskextracredit; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class AsyncTaskTestActivity extends AppCompatActivity { private static final String TAG = AsyncTaskTestActivity.class.getSimpleName(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_async_task_test); new TestTask().execute("Execute"); Log.d(TAG, "In UI Thread!"); } private class TestTask extends AsyncTask { @Override protected String doInBackground(String... params) { for (int i = 0; i <= 100; i+=20) { try { Thread.sleep(50); } catch (InterruptedException e) { Log.e(TAG, "Exception Caught: ", e); } publishProgress(i); } return "Background Task Complete"; } @Override protected void onProgressUpdate(Integer... values) { Toast.makeText(AsyncTaskTestActivity.this, "Progress: " + values[0], Toast.LENGTH_LONG).show(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Log.d(TAG, "In onPostExecute: " + s); Toast.makeText(AsyncTaskTestActivity.this, s, Toast.LENGTH_LONG).show(); } } } 
  1. 我正在使用TestTask.execute()方法从主UI线程启动异步任务。

  2. doInBackground()方法工作正常。 它会hibernate一段时间,调用publishProgress()方法并在onProgressUpdate()方法中显示Toast。

  3. 我希望只有在doInBackground()完成后才能调用onPostExecute()方法。 但是,只要我启动应用程序,就会在onPostExecute()方法中获取Log消息。

有些不对劲我无法弄明白。 这段代码有什么问题?