线程之间的数据传输之AsyncTask

1.底层仍然是通过Handler来实现线程通讯

2.用AsyncTask的好处在于代码更加清晰,便于管理和维护

3.提供了线程池(预加载许多线程)节省了时间,线程池是静态的

private static final BlockingQueue<Runnable> sPoolWorkQueue =
            new LinkedBlockingQueue<Runnable>(128);

多个AsyncTask对象共用一个线程池

4.使用AsyncTask不用写flag来结束子线程


代码:

public class MainActivity extends Activity {
	private TextView tv_txt;
	private MyAsyncTask task;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv_txt=(TextView) findViewById(R.id.tv_txt);
		//创建自定义AsyncTask对象
		task=new MyAsyncTask();
		//执行任务
		//传入的参数供doInBackground使用
		task.execute("http://www.baidu.com");
	}
	/**
	 * 这里的三个泛型依次对应
	 * 第一个String对应doInBackground的可变参数String... params
	 * Integer对应onProgressUpdate的可变参数Integer... values
	 * 第二个String对应onPostExecute的参数String result
	 * */
	private class MyAsyncTask extends AsyncTask<String,Integer,String> {
		/**
		 * 主线程调用,在doInBackground之前执行
		 * */
		@Override
		protected void onPreExecute() {
			//通常用于弹加载对话框
			Log.d("ein", "onPreExecute");
		}
		/**
		 * 子线程调用,在onPreExecute之后执行
		 * 返回的值作为参数传入onPostExecute方法
		 * */
		@Override
		protected String doInBackground(String... params) {
			Log.d("ein","正在请求:"+params[0]);
			try {
				//模拟网络请求
				for(int i=1;i<=100;i++){
					Thread.sleep(1000);
					Log.d("ein",i+"");
					//推送进度信息
					//该方法会去调用onProgressUpdate方法
					publishProgress(i);
				}
				String str="需要被传输的数据";
				return str;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}
		/**
		 * 主线程调用,在doInBackground之后执行
		 * */
		@Override
		protected void onPostExecute(String result) {
			Log.d("ein", "onPostExecute");
			tv_txt.setText(result);
			//关闭加载对话框
		}
		/**
		 * 主线程调用,更新进度时调用
		 * */
		@Override
		protected void onProgressUpdate(Integer... values) {
			tv_txt.setText(values[0]+"%");
		}
	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		//AsyncTask中的cancel方法实现了结束子线程,
		//所以不需要像handler那样写flag
		task.cancel(true);
	}
}






你可能感兴趣的:(android,数据,AsyncTask,通讯)