首先是執行順序問題,下面的代碼是隨意構造的一個AsyncTask類,
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("順序5"); new MyAsynchTask().excute(23); System.out.println("順序6");}
private class MyAsynchTask extends AsyncTask<Integer, Void, List<String>> { @Override protected List<String> doInBackground(Integer... params) { System.out.println("順序1"); /** 你的邏輯代碼,比如下載檔案等耗時的操作 */ System.out.println("順序2"); return null; } @Override protected void onPreExecute() { System.out.println("順序3"); } @Override protected void onPostExecute(List<String> list) { System.out.println("順序4"); } }
執行結果為:
順序5
順序3
順序6
順序1
順序2
順序4
所以,onPreExecute肯定是在excute調用時就在main線程執行了的,然後doInBackground則是另開了一個獨立的線程。而onPostExecute在doInBackground之後再執行。
參數列表
第一個為doInBackground接受的參數,第二個為顯示進度的參數,第三個為doInBackground返回和onPostExecute傳入的參數。