android异步机制

工程中读取书签历史的数据时采用异步机制。在Android中,如果涉及网络编程或者某些极耗资源的操作的时候,必然会出现操作时间久的情况,而Android中不能在ui线程中进行过于耗时的操作,不然会出现“强制关闭,等待”的提示信息。在android中有两种异步处理方式,一是Thread与Handler结合,二是AsyncTask。

使用asynctask类和使用标准线程机制

 

Asynctask提供一些抽象类的方法,能使用户在不用创建线程的情况下管理后台操作。

它提供了以下方法:

obPreExecute() 运行于ui进程,用于进入后台操作前的操作

doInBackGround()运行后台操作

publishProgress()周期性通知UI线程有关后台操作的进度

onPostExecute() 后台操作完成后,调用此方法


	public class ProAT extends AsyncTask<String, Integer, String> {
		/*
		 * 第一个参数为doInBackground传入的参数,
		 * 第二个参数为onProgressUpdate传入参数,由doInBackground内调用publishProgress
		 * (Interger)传值; 第三个为doInBackground返回值和onPostExecute传入的参数。
		 */
		@Override
		protected void onPreExecute() {
			// 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上转菊花提示
			System.out.println("onPreExecute--->Task start");
			super.onPreExecute();
		}

		@Override
		protected String doInBackground(String... params) {
			// 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。
			// 这里将主要负责执行那些很耗时的后台计算工作。
			System.out.println("doInBackground---->");
			try {
				Thread.sleep(5000);
				// 可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
				publishProgress(1);
			} catch (InterruptedException e) {
				// TODO: handle exception
				e.printStackTrace();
			}
			return "doInBackground";
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			System.out.println("更新进度" + values[0]);
			// 在publishProgress方法被调用后,UI
			// thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
			super.onProgressUpdate(values);
		}

		@Override
		protected void onPostExecute(String result) {
			// 在doInBackground 执行完成后,onPostExecute 方法将被UI
			// thread调用,后台的计算结果将通过该方法传递到UI thread
			// 用于更新UI
			update();
			System.out.println("onPostExecute----->" + result);
			super.onPostExecute(result);
		}

		@Override
		protected void onCancelled() {
			// 当用户取消操作时.
			super.onCancelled();
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值