在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(); } } }
-
我正在使用
TestTask.execute()
方法从主UI线程启动异步任务。 -
doInBackground()
方法工作正常。 它会hibernate一段时间,调用publishProgress()
方法并在onProgressUpdate()
方法中显示Toast。 -
我希望只有在
doInBackground()
完成后才能调用onPostExecute()
方法。 但是,只要我启动应用程序,就会在onPostExecute()
方法中获取Log消息。
有些不对劲我无法弄明白。 这段代码有什么问题?