博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android AsyncTask简单使用
阅读量:6705 次
发布时间:2019-06-25

本文共 2039 字,大约阅读时间需要 6 分钟。

hot3.png

/**	 * 第一个参数类型Boolean 为启动任务执行的输入参数,doInBackground方法传入	 * 第二个参数类型Integer 为后台执行过程时参数输出,onProgressUpdate方法传入	 * 第三个参数类型String 为最后输出返回的结果值,onPostExecute 方法传入	 */	private class TestAsyncTask extends AsyncTask
{ private Context mContext; public TestAsyncTask(Context context){ this.mContext = context; } private ProgressDialog dialog; //2、运行完onPreExecute后执行,长时间的操作放在此方法内, //此方法内不能操作UI //返回结果值 @Override protected String doInBackground(Boolean... strings) { for(int i=0;i<100;i++){ this.publishProgress(i);//传参给onProgressUpdate 进行UI等操作,例如执行进度更新 } return null; } //1、开始执行时运行 @Override protected void onPreExecute() { dialog = ProgressDialog.show(mContext,"提示","操作执行中...."); super.onPreExecute(); } //3、执行完毕 @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(); } }

具体参数对应

093601_iARp_351612.png

 

方法调用:

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

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

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

如果想同时执行多个AsyncTask任务,调用时可通过new AsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)执行。

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

想同时执行更多个任务也可以新建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);

 

转载于:https://my.oschina.net/u/351612/blog/742892

你可能感兴趣的文章
CSS中如何把Span标签设置为固定宽度
查看>>
android设计的布局在阿拉伯语下界面错乱的解决方法
查看>>
HDU 1253 胜利大逃亡 NYOJ 523【BFS】
查看>>
VIM 插入
查看>>
iOS 开发如何入门
查看>>
关于Unity中的Input输入事件
查看>>
(转)Openlayers 2.X加载高德地图
查看>>
项目实战:如何构建知识图谱
查看>>
JVM Specification 9th Edition (2) Chapter 1. Introduction
查看>>
Linux开机启动脚本 - 转
查看>>
php错误抑制符
查看>>
Tronado自定义Form组件
查看>>
Win8Metro(C#)数字图像处理--2.32图像曝光算法
查看>>
Cocos Creator socket.io打包Apk后无法连接
查看>>
Vue基础知识总结(一)
查看>>
使用JNA解决自动化测试无法做密码输入操作的问题
查看>>
WPF关闭应用程序方法
查看>>
jQuery系列 第四章 jQuery框架的选择器
查看>>
Android实现录音的方法(最重要的是对MediaRecorder的试用方法)
查看>>
Android ViewDragHelper完全解析 自定义ViewGroup神器
查看>>