Android笔记: AsyncTask 的使用

和使用匿名线程相比较来说 AsyncTask 有如下好处:

·  线程的开销较大,如果每个任务都要创建一个线程,那么应用程 序的效率要低很多;

·  线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。

·  另外,前面已经看到,在新线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。

 

AsyncTask定义了三种泛型类型 Params,Progress和Result。

·             Params 启动任务执行的输入参数,比如HTTP请求的URL。

·             Progress 后台任务执行的百分比。

·             Result 后台执行任务最终返回的结果,比如String。

 

class LoadingTask extends AsyncTask<Void, Integer, Void>{
		//需要长时间阻塞处理的任务
		@Override
		protected Void doInBackground(Void... params) {
			//     实现任务的执行工作
			//   线程中的处理,这儿不能操作UI
			Log.i(TAG,"LoadingTask--doInBackground:");
			publishProgress(0);
			try {
				Thread.sleep(1000 * 5);	//5秒后
			} 
			catch (Exception e) {
				e.printStackTrace();
			}
			publishProgress(50);
			try {
				Thread.sleep(1000 * 5);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			publishProgress(100);
			Log.i(TAG,"LoadingTask--doInBackground:"+params);
			return null;
			//publishProgress();	//调用这个函数好后会激活onProgressUpdate()事件 
		}
		
		@Override
		protected void onCancelled() {
			Log.i(TAG,"LoadingTask--onCancelled:");
			super.onCancelled();
		}
		
		// 线程内更新处理
		@Override
		protected void onProgressUpdate(Integer... values) {
			// 这边用于处理线程未完成的提示处理,例如进度条更新
			pBar.setProgress(values[0]);
			Log.i(TAG,"LoadingTask--onProgressUpdate:");
			super.onProgressUpdate(values);
		}
		
		// 线程启动初始化操作
		@Override
		protected void onPreExecute() {
			// 任务启动,比如显示一个提示框或进度条
			Log.i(TAG,"LoadingTask--onPreExecute:");
		}
		
		// 阻塞任务执行完后的清理工作
		@Override
		protected void onPostExecute(Void v) {
			// 线程处理结束,操作UI,关闭提示框或者关闭进度条
			pBar.setVisibility(View.INVISIBLE);
			Log.i(TAG,"LoadingTask--onPostExecute:");

		}
	}

 



 

·             onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。

·             doInBackground(Params…) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。

·             onProgressUpdate(Progress…) 此方法在主线程执行,用于显示任务执行的进度。

·             onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值