`
zhengdl126
  • 浏览: 2539212 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

AsyncTask异步方式详解及其使用 .

 
阅读更多

在实际应用中经常会遇到比较耗时任务的处理,比如网络连接,数据库操作等情况时,如果这些操作都是放在主线程(UI线程)中,则会造成UI的假死现象,Android中可以使用AsyncTask和Handler两种异步方式来解决这种问题。Handler异步方式详解及其使用


AsyncTask(异步任务处理)
在使用AsyncTask时处理类需要继承AsyncTask,提供三个泛型参数,并且重载AsyncTask的四个方法(至少重载一个)。

 

三个泛型参数:
1.Param 任务执行器需要的数据类型
2.Progress 后台计算中使用的进度单位数据类型
3.Result 后台计算返回结果的数据类型
在设置参数时通常是这样的:String... params,这表示方法可以有0个或多个此类型参数;有时参数可以设置为不使用,用Void...即可。

 

四个方法:
1.onPreExecute() 执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。
2.doInBackground(Params...) 后台进程执行的具体计算在这里实现,doInBackground(Params...)是AsyncTask的关键,此方法必须重载。在这个方法内可以使用publishProgress(Progress...)改变当前的进度值。
3.onProgressUpdate(Progress...) 运行于UI线程。如果在doInBackground(Params...) 中使用了publishProgress(Progress...),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
4.onPostExecute(Result) 运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params...)的返回值。此方法也要经常重载,如果Result为null表明后台任务没有完成(被取消或者出现异常)。

 

 

// AsyncTask异步方式下载图片
class DownImageTask extends AsyncTask<String, Integer, Bitmap> {
	// 执行预处理
	@Override
	protected void onPreExecute() {
		super.onPreExecute();
		// 显示进度条
		progressBar.setVisibility(View.VISIBLE);
		progressBar.setMax(100);
	}
	// 后台进程的执行
	@Override
	protected Bitmap doInBackground(String... params) {
		try {
			URL url = new URL(params[0]);
			HttpURLConnection conn = (HttpURLConnection) url
					.openConnection();
			InputStream inputStream = conn.getInputStream();
			bitmap = BitmapFactory.decodeStream(inputStream);
			// 进度条的更新,我这边只是用一个循环来示范,在实际应用中要使用已下载文件的大小和文件总大小的比例来更新
			for (int i = 1; i <= 10; i++) {
				publishProgress(i * 10);
				Thread.sleep(200);
			}
			inputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return bitmap;
	}
	// 运行于UI线程,对后台任务的结果做出处理,doInBackground方法执行的结果作为此方法的参数
	@Override
	protected void onPostExecute(Bitmap result) {
		super.onPostExecute(result);
		ImageView imageView = (ImageView) findViewById(R.id.image);
		imageView.setImageBitmap(result);
		progressBar.setVisibility(View.GONE);
	}
	// 运行于UI线程,如果在doInBackground(Params...)中使用了publishProgress(Progress...),就会触发此方法
	@Override
	protected void onProgressUpdate(Integer... values) {
		super.onProgressUpdate(values);
		progressBar.setProgress(values[0]);
	}
}

 

 

 

 

分享到:
评论

相关推荐

    AsyncTask类实例详解

    而在Android 9.0(API Level 28)之后,AsyncTask被弃用,推荐使用其他异步处理机制,如`Executor`服务。 综上所述,AsyncTask是Android中处理短时、轻量级异步任务的工具,它简化了多线程编程,并确保了UI线程的...

    Android_AsyncTask_详解

    ### Android AsyncTask 详解 #### 一、AsyncTask 概述 `AsyncTask` 是 Android 提供的一个用于执行后台任务的轻量级框架。它能够帮助开发者轻松地在后台线程执行耗时的操作,并且更新 UI 界面而无需直接操作线程和...

    android异步任务设计思详解(AsyncTask)

    总之,`AsyncTask`是Android中一个便捷的异步处理工具,它的设计思想在于简化线程管理和UI交互,但也有其使用限制。理解`AsyncTask`的工作原理和注意事项,可以帮助开发者更高效地处理异步任务,提高应用程序的性能...

    详解Android App中的AsyncTask异步任务执行方式

    总之,Android的AsyncTask提供了一种便捷的方式来处理短时间的异步任务,尤其是在需要与UI交互时。然而,对于长时间运行的任务或复杂的多线程操作,应考虑使用其他工具,如IntentService、Loader或者现代的Android...

    异步任务类的使用

    这些工具提供了更灵活和高效的方式来处理异步任务,尤其是在Android O及以上版本中,由于限制,AsyncTask的使用变得更为复杂。 总结,虽然AsyncTask在早期Android开发中非常流行,但随着技术的发展,开发者应逐渐...

    简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip

    《Android音乐播放器实现详解——基于Service与异步线程》 在移动设备上,音乐播放器是不可或缺的应用之一。本篇文章将详细解析一个简单的Android音乐播放器的实现,主要涉及Service后台播放音乐以及异步线程加载...

    AsyncTask 详解

    本篇文章将详细解析AsyncTask的工作原理、使用方法及其优缺点。 首先,AsyncTask包含三个泛型参数:Params、Progress和Result。Params代表在execute()方法中传入的参数类型;Progress表示后台任务执行过程中的进度...

    Android AsyncTask详解及使用方法

    Android AsyncTask详解及使用方法 AsyncTask是Android提供的一种轻量级的异步类,用于实现后台任务的执行。它可以直接继承AsyncTask,并在类中实现异步操作,提供接口反馈当前异步执行的程度,并在执行完成后反馈...

    Android应用开发详解_源码.rar

    AsyncTask和IntentService是常见的异步处理方式,现在推荐使用现代的LiveData和Coroutines。 8. **权限管理**:自Android 6.0(API level 23)起,部分敏感权限需要在运行时动态请求。开发者需要了解如何在代码中...

    Android AsyncTask实现异步处理任务的方法详解

    "Android AsyncTask实现异步处理任务的方法详解" Android AsyncTask是Android操作系统提供的一个工具类,用于实现异步处理任务的方法详解。AsyncTask是抽象类,定义了三种泛型类型 Params,Progress和Result。...

    12_Android 多线程AsyncTask详解

    AsyncTask作为其中的一种工具,提供了一种便捷的方式来执行后台任务并在完成后更新UI,避免了主线程的阻塞,是Android开发者处理异步操作的常用手段。正确理解和使用AsyncTask,能够有效地提升Android应用的性能和...

    Android系统原理与开发要点详解_培训课件.zip

    5. 性能优化:包括内存优化、耗电优化、渲染优化等,例如使用WeakReference防止内存泄漏,利用AsyncTask异步处理任务。 6. 测试:包括单元测试、集成测试、UI自动化测试等,确保应用稳定性和功能正确性。 四、...

    asynctask的用法详解

    总的来说,`AsyncTask`为开发者提供了一种简单且高效的方式,来处理那些需要与UI交互的异步任务,使得在主线程中执行UI操作变得更加安全和便捷。然而,对于更复杂的异步任务,可能需要考虑使用`IntentService`、`...

    Android系统原理及开发要点详解–2.pdf 高清下载

    - **异步处理**:避免在主线程中执行耗时操作,使用AsyncTask、HandlerThread等技术进行异步编程。 #### 5. 安全性考虑 - **权限管理**:明确应用所需权限,并确保用户知情同意。 - **数据加密**:敏感数据应使用...

    Android AsyncTask 后监听异步加载完毕的动作详解

    Android 使用AsyncTask 后监听异步加载完毕的动作  AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便。这里就不详细说具体的使用方法了,同学可以Google 一下,很多。 场景模拟  当我们在加载一个列表的...

    Android的异步任务AsyncTask详解

    AsyncTask是Android提供的一种轻量级异步处理机制,它简化了在UI线程与后台线程之间传递数据的过程。在本文中,我们将深入探讨AsyncTask的原理、使用方法以及其限制。 AsyncTask的定义: 正如官方文档所述,...

    Android系统原理及开发要点详解–1.pdf 高清下载

    - 多线程和异步处理:掌握在Android中使用Thread、Handler、AsyncTask等进行多线程编程和异步任务处理。 - 调试和性能优化:了解如何使用Logcat进行日志记录,以及如何使用Android Profiler等工具进行性能监控和分析...

Global site tag (gtag.js) - Google Analytics