android AsyncTask简单使用

/**
	 * 第一个参数类型Boolean 为启动任务执行的输入参数,doInBackground方法传入
	 * 第二个参数类型Integer 为后台执行过程时参数输出,onProgressUpdate方法传入
	 * 第三个参数类型String 为最后输出返回的结果值,onPostExecute 方法传入
	 */
	private class TestAsyncTask extends AsyncTask<Boolean,Integer,String>{

		private Context mContext;

		public TestAsyncTask(Context context){
			this.mContext = context;
		}

		private ProgressDialog dialog;
		//二、运行完onPreExecute后执行,长时间的操做放在此方法内,
		//此方法内不能操做UI
		//返回结果值
		@Override
		protected String doInBackground(Boolean... strings) {
			for(int i=0;i<100;i++){
				this.publishProgress(i);//传参给onProgressUpdate 进行UI等操做,例如执行进度更新
			}
			return null;
		}

		//一、开始执行时运行
		@Override
		protected void onPreExecute() {
			dialog = ProgressDialog.show(mContext,"提示","操做执行中....");
			super.onPreExecute();
		}

		//三、执行完毕
		@Override
		protected void onPostExecute(String s) {
			if(dialog.isShowing()){
				dialog.dismiss();
			}
			super.onPostExecute(s);
		}

		//执行过程进行进度更新等操做
		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
		}

		//调用取消时,要作的操做
		@Override
		protected void onCancelled(String s) {
			super.onCancelled(s);
		}

		//调用取消时,要作的操做
		@Override
		protected void onCancelled() {
			super.onCancelled();
		}
	}

具体参数对应java

 

方法调用:ide

AsyncTask必须在UI线程中实例化,经过excute()开始调用执行,调用也必须在UI线程中进行this

每次实例化AsyncTask只能调用一次线程

新执行的Task时若是还存在其余tTask未执行完毕,新Task只会执行onPreExecute方法,等待前一个Task执行完毕才进行余下的方法。code

若是想同时执行多个AsyncTask任务,调用时可经过new AsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)执行。string

可是也是只能进行五个任务同时执行。class

想同时执行更多个任务也能够新建ExecutorService来执行。后台

private static ExecutorService SINGLE_TASK_EXECUTOR;
	private static ExecutorService LIMITED_TASK_EXECUTOR;
	private static ExecutorService FULL_TASK_EXECUTOR;

	static {
		//
		SINGLE_TASK_EXECUTOR = (ExecutorService) Executors.newSingleThreadExecutor();
		//使用自定义的CorePoolSize为7
		LIMITED_TASK_EXECUTOR = (ExecutorService) Executors.newFixedThreadPool(7);
		//使用未设限制的Executor
		FULL_TASK_EXECUTOR = (ExecutorService) Executors.newCachedThreadPool();
	};
//执行
new TestAsyncTask().executeOnExecutor(LIMITED_TASK_EXECUTOR);
相关文章
相关标签/搜索