asyncTask 是android提供的一個輕量級的異步處理的類,有3個泛型參數,params,progress,resultandroid
params: 啓動任務執行的時候傳入的參數好比請求的 url 地址app
progress:後臺任務執行的百分比異步
result:後臺任務執行完畢後返回的結果 好比stringasync
使用asynctask必需要重寫2個方法,一個是 doInBackground(Params...) 後臺執行的方法,比較耗時的方法,這裏不能直接操做ui,能夠經過publicProgress(Progress...)來更新任務的進度ide
第2個方法是 onPostExecute(Result)至關於handler的處理ui的方式,此方式是任務執行完畢後獲取返回的結果,進行下一步的處理。ui
還有 好比onPreExecute () 任務執行以前的方法,onCancelled() 用戶調用取消時,要作的操做,onProgressUpdate(Progress...)能夠使用進度條增長用戶的體驗度,此方法在主線程上執行,能夠操做UIthis
注意事項:url
task的實例必須在UI Thread中建立線程
execute方法必須在ui thread中調用orm
不要手動去調用 onPreExecute()....等方法
task只能被執行一次,不然屢次調用時出現異常
demo:
private void asyncTaskGetJson(String params) {
new AsyncTask<String, Float, String>() {
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
URL url;
StringBuilder sb = new StringBuilder();
try {
url = new URL(params[0]);
URLConnection connection = url.openConnection();
float size = connection.getContentLength();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
publishProgress((float)sb.toString().length() / size );
}
br.close();
isr.close();
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "開始訪問sina網", Toast.LENGTH_LONG).show();
Log.d("abc", "開始訪問sina網");
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "錯誤請求"+result, Toast.LENGTH_LONG).show();
Log.d("abc", "訪問完畢,內容"+result);
}
@Override
protected void onProgressUpdate(Float... values) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "請求"+values[0], Toast.LENGTH_LONG).show();
}
}.execute(params);
}
調用: asyncTaskGetJson("http://www.sina.com");