AsyncTask,是一個Android封裝好的輕量級異步類,是Android應用在多線程使用上常用的方法之一,可降低異步通信的開發難度
如何使用
public class UserLoginTask extends AsyncTask<String, Integer, String> {
UserLoginTask(String loginId, String password) {
ALog.vTag(TAG, "loginId:%s,password:%s", loginId, password);
}
/**
* 開始執行後臺線程時調用,當前處於UI線程
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
ALog.vTag(TAG, "onPreExecute ...");
}
/**
* 開始執行後臺線程任務,AsyncTask子線程
*/
@Override
protected String doInBackground(String... params) {
ALog.vTag(TAG, "params:%s", Arrays.toString(params));
// TODO: 執行耗時的業務
return "doInBackground返回的數據";
}
/**
* 刷新線程,調用publishProgress(i)時回調,一般用於刷新進度,比如doInBackground中調用publishProgress進行進度刷新,UI線程
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
ALog.vTag(TAG, "values:%s", Arrays.toString(values));
}
/**
* 後臺線程結束時調用,當前處於UI線程
*/
@Override
protected void onPostExecute(String success) {
ALog.vTag(TAG, "success:%s", success);
}
@Override
protected void onCancelled() {
ALog.vTag(TAG, "onCancelled ....");
}
}
實例並啓動後臺線程
mAuthTask = new UserLoginTask(loginId, password);
mAuthTask.execute("我是URL","我是param1");
生命週期說明
onPreExecute()
後臺線程通知UI線程,後臺線程開始執行doInBackground(Params... params)
後臺線程,處理耗時任務,其中參數params爲execute(Params… params)所攜帶的參數數組內容onPostExecute(Result result)
後臺線程處理完業務邏輯後反饋執行結果給UI線程,其中參數result爲doInBackground返回的數據內容onProgressUpdate(Progress... values)
後臺線程實時反饋執行過程給UI線程,一般用在UI的進度刷新,其中參數爲在doInBackground回調中調用publishProgress(Progress… values)方法所帶入的參數valuesonCancelled()
後臺進程執行完成或者執行過程中被主動執行cancel(boolean mayInterruptIfRunning)時調用,此時onPostExecute就不被回調
其中,這些接口上的參數,取決於實例AsyncTask<Params, Progress, Result>
時所定義的類型,如上面使用例子定義的是AsyncTask<String, Integer, String>