Android 异步任务 AsyncTask 的使用总结

来源:互联网 发布:三角形最短路径java 编辑:程序博客网 时间:2024/04/17 02:40


程序终结者——异步任务 AsyncTask 

  AsyncTask 行走于UI线程和子线程之间,使用者可以轻松使用。

  本文对AsyncTask的三个泛型做了粗略的介绍。

  代码如下,XML就不贴了。

package com.example.threaddemo;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);tv = (TextView) findViewById(R.id.tv1);//异步任务的使用,很简单吧MyAsyncTask myAsyncTask = new MyAsyncTask();myAsyncTask.execute();}class MyAsyncTask extends AsyncTask<Void,Integer,String>{//<泛型>在继承该类时指定int num = 0;/** * 后台线程运行 * 入参  params :类型为AsyncTask<Void,Integer,String>的第一个泛型,值由execute()的传递 * 返回值 :类型String,是 AsyncTask<Integer,Integer,String>的第三个泛型 */@Overrideprotected String doInBackground(Void... params) {for(int i=0;i<11;i++){num++;try {Thread.sleep(500);//入参num传递给onProgressUpdate(Integer... values)的values。//参数类型与AsyncTask<Integer,Integer,String>的第二个泛型相符publishProgress(num);} catch (InterruptedException e) {e.printStackTrace();}}return num+"";}/** * 在UI线程运行,执行在doInBackground()之前 */@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();}/** * 在UI线程运行,执行在doInBackground()之后 * 形参result接收doInBackground的返回值. */@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);}/** * UI线程运行,由publishProgress()触发执行 * 参数values由publishProgress()传入,类型是 AsyncTask<Integer,Integer,String>的第二个泛型 */@Overrideprotected void onProgressUpdate(Integer... values) {tv.setText(values[0]+"");super.onProgressUpdate(values);}/** * UI线程运行 */@Overrideprotected void onCancelled(String result) {// TODO Auto-generated method stubsuper.onCancelled(result);}/** * UI线程运行,终止异步任务的执行,由cancel()触发执行 */@Overrideprotected void onCancelled() {// TODO Auto-generated method stubsuper.onCancelled();}}}



0 0