`
xiaoyaoniu
  • 浏览: 189329 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

android之多线程工作(一)AsyncTask .

阅读更多

本文章主要讲解下AsyncTask的使用。

       首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!

       android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件。

       当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没办法同时保证上面的两点要求;我们肯定会想到开启一个新的线程,让这个复杂耗时的任务到后台去执行,但是执行完毕了呢?我们发现,我们无法再与ui进行交互了。

      为了解决这种情况,android为我们提供了很多办法。

1)、handler和message机制:通过显示的抛出、捕获信息与ui进行交互;

2)、Activity.runOnUiThread(Runnable):如果当前线程为ui线程,则立即执行;否则,将参数中的线程操作放入到ui线程的事件队列中,等待执行。

3)、View.post(Runnable):将操作放入到message队列中,如果放入成功,该操作将会在ui线程中执行,并返回true,否则返回false

4)、View.postDelayed(Runnable,long)跟第三条基本一样,只不过添加了一个延迟时间。

5)、android1.5以后为我们提供了一个工具类来搞定这个问题AsyncTask.

 

AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。 
  

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

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

 

 

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

 

 

用程序调用,开发者需要做的就是实现这些方法。


  
 

 

1) 子类化AsyncTask

  2) 实现AsyncTask中定义的下面一个或几个方法

     onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。

    doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。

    onProgressUpdate(Progress...),publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。

    onPostExecute(Result), doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.

 

为了正确的使用AsyncTask类,以下是几条必须遵守的准则:

  1) Task的实例必须在UI thread中创建

  2) execute方法必须在UI thread中调用

  3) 不要手动的调用onPreExecute(), onPostExecute(Result)doInBackground(Params...), onProgressUpdate(Progress...)这几个方法

  4) task只能被执行一次,否则多次调用时将会出现异常

package cn.com.chenzheng_java;

import android.os.AsyncTask;
/**
 * 
 * @author chenzheng_java
 * @description 异步任务AcyncTask示例
 *	
 */
public class MyAsyncTask extends AsyncTask<String, Integer, Object> {

	/**
	 * 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。
	 * 很多时候,我们会在这里显示一个进度条啥的,以示后台正在
	 * 执行某项功能。
	 */
	@Override
	protected void onPreExecute() {
		super.onPreExecute();
	}
	
	/**
	 * 该方法由后台进程进行调用,进行主要的耗时的那些计算。
	 * 该方法在onPreExecute方法之后进行调用。当然在执行过程中
	 * 我们可以每隔多少秒就调用一次publishProgress方法,更新
	 * 进度信息
	 */
	@Override
	protected Object doInBackground(String... params) {
		return null;
	}

	
	/**
	 * doInBackground中调用了publishProgress之后,ui线程就会
	 * 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道
	 * 当前的进度。
	 */
	@Override
	protected void onProgressUpdate(Integer... values) {
		super.onProgressUpdate(values);
	}

	/**
	 * 当doInBackground执行完毕之后,由ui线程调用。可以在这里
	 * 返回我们计算的最终结果给用户。
	 */
	@Override
	protected void onPostExecute(Object result) {
		super.onPostExecute(result);
	}



	
}

 

 

 

 

  。 

分享到:
评论

相关推荐

    详解Android中用于线程处理的AsyncTask类的用法及

    早期版本使用单线程执行任务,后来改为多线程,但由于多线程可能导致线程安全问题,从 Android 3.0 开始,又改回了单线程模式。因此,开发者需要了解目标设备的 Android 版本,以便正确理解和使用 AsyncTask。 总的...

    Android中多线程机制的探究.pdf

    为了解决这个问题,Android提供了两种主要的多线程机制:AsyncTask和Handler机制。 1. **AsyncTask**:AsyncTask是一个轻量级的异步任务执行框架,适合执行短时间的后台任务并更新UI。它包含三个泛型参数,分别表示...

    Android多线程PPT教学课件.pptx

    【Android多线程】\n\n在Android开发中,多线程是不可或缺的一部分,它能够提升应用程序的性能和用户体验。Android系统默认在一个主线程中运行应用程序,包括UI更新,如果在此线程中执行耗时操作,会导致用户界面...

    Android多线程处理[参考].pdf

    Android多线程处理是移动应用开发中的关键概念,尤其是在性能优化和用户体验提升方面。Android系统采用的是单线程模型,即主线程(也称为UI线程)主要负责处理用户界面的交互和绘图,包括按键事件、触摸事件以及屏幕...

    android中AsyncTask的用法

    在Android应用开发中,AsyncTask是一个用于在后台线程执行耗时操作并更新UI的工具类,它是Android 1.5版本引入的。AsyncTask的设计初衷是为了简化异步编程,避免直接操作线程和Handler带来的复杂性。下面我们将详细...

    Android 多线程断点下载源码.zip源码资源下载

    在Android开发中,多线程断点下载是一项重要的技术,特别是在处理大文件下载时,能够提高效率并提供更好的用户体验。本资源"Android 多线程断点下载源码.zip"包含了一个实现这一功能的示例代码,对于学习和理解...

    Android AsyncTask用法和异步加载图片.rar

    `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间运行的任务放到后台线程,而将结果更新到主线程,这样可以避免主线程(UI线程)阻塞,提高应用的响应速度。`...

    支持android多线程下载功能源码.zip

    这款名为"支持android多线程下载功能源码.zip"的压缩包提供了一个实现这一功能的源码示例,方便开发者理解和应用。下面将详细解释多线程下载的基本原理、实现方法以及它在Android中的应用。 1. **多线程下载原理**...

    AsyncTask 异步多线程加载Demo

    在Android开发中,AsyncTask是一种轻量级的异步任务处理机制,主要用于UI线程与后台线程之间的通信,以实现耗时操作的异步执行,避免阻塞主线程,提高用户体验。`AsyncTask`类提供了简单易用的接口,使得开发者能够...

    AsyncTask异步任务三.rar

    对于更复杂的多线程需求,如大数据处理、服务端同步等,可能需要考虑使用其他并发工具,如IntentService、Loader或Java的Executor框架。 在提供的"AsyncTask异步任务三"示例中,你将找到一个详尽的教程,演示如何在...

    Android AsyncTask多线程详解

    Android Asynctask 先小试牛刀,了解一下各个方法执行过程,关注博客http://himici.com/

    Android应用源码之讲多线程的操作方式.zip

    这个压缩包“Android应用源码之讲多线程的操作方式.zip”很可能是提供了一些示例代码,用于演示如何在Android环境中有效地管理多线程。下面将详细讲解Android应用中多线程的操作方式及其重要性。 1. **主线程(UI...

    Android 多线程断点下载源码.rar

    总之,Android多线程断点下载是一个涉及网络编程、文件操作和线程管理等多个领域的复杂功能,理解和掌握这一技术对于提高Android应用的性能和用户体验至关重要。通过分析提供的源代码,开发者可以深入学习到这些知识...

    Android多线程文件上传

    本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程,提高效率,并确保应用的响应性。 一、多线程基础 多线程是并发执行多个任务的能力,它允许应用程序同时处理多个任务,提高...

    12_Android 多线程AsyncTask详解

    总的来说,Android的多线程处理是通过合理的分配工作到主线程和工作线程来提高应用程序的响应速度和用户体验。AsyncTask作为其中的一种工具,提供了一种便捷的方式来执行后台任务并在完成后更新UI,避免了主线程的...

    Android 多线程断点下载源码.zip

    这个"Android多线程断点下载源码.zip"压缩包提供了一个完整的示例项目,可以帮助开发者理解和实现这一功能。下面我们将详细探讨这个项目中的关键知识点。 1. **多线程下载**: 在Android中,单线程下载速度有限且...

    Android中AsyncTask实现多线程计数

    总的来说,Android的AsyncTask是实现多线程计数的一种简单而有效的方法,通过它可以轻松地在后台执行计算并在UI上实时显示结果,确保应用的流畅性。但同时也需注意其限制和潜在的性能问题,根据实际需求选择合适的...

Global site tag (gtag.js) - Google Analytics