`
chroya
  • 浏览: 661589 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android中用AsyncTask简单实现多线程

阅读更多

      一般情况下在android中使用多线程的时候,我们都是在线程运行的时候使用Handler来给主线程传递消息,这样用起来虽然没什么不好,但是总感觉有点乱。其实Android已经提供了一个标准的实现多线程的模型,那就是AsyncTask类。
      这个类用起来很简单,继承他之后,override几个方法,然后就可以在线程执行过程中,不断的将结果通知给ui线程。
      下面简单讲一下用法,看代码:

package cn.infogiga.starter;

import android.os.AsyncTask;
import android.util.Log;

/**
 * @author chroya
 *
 */
public class MyThreads extends AsyncTask<Integer, Integer, Integer>{

	@Override
	protected Integer doInBackground(Integer... params) {		
		int p = 0;  //计数
		for(int index=0; index<params.length; index++) {
			int num = params[index];
			for(int j=0; j<num; j++) {
				if(num-j<=0) {
					break;
				}
				p++;
				//通知每一次的数目变化
				publishProgress(p);				
			}			
		}
		//返回总数
		return p;
	}

	@Override
	protected void onProgressUpdate(Integer... progress) {
		Log.d("onProgressUpdate", "progress:"+ progress[0]);
    }

	@Override
	protected void onPostExecute(Integer result) {
        Log.d("onPostExecute", "result:"+ result);
    }	
}
 

      MyThreads继承了AsyncTask,他有三个泛型参数,第一个是任务执行所需要的参数类型,第二个是任务的进度表示类型,第三个是进度计算的结果类型。

      我override了三个方法:

doInBackground:就是任务执行的主方法,它会被作为一个线程运行。

onProgressUpdate:进度更新的时候调用,进度什么时候更新呢?就是调用了publishProgress方法之后就更新。

onPostExecute:在doInBackground执行并返回之后调用,因为他需要doInBackground的返回值做参数。
        怎么使用它呢?

new MyThreads().execute(10, 20, 30);

         没错,就这一句。

         这一句传递了三个参数进去,传递给了 doInBackground,然后线程开始运行,将三个数开始逐一计数,虽然计数不用这么麻烦,但是为了弄明白AsyncTask的运行机制,复杂点反而好。

         结果打印出 onProgressUpdate的 1到60,最后打印出了 onPostExecute的result:60.

 

4
0
分享到:
评论
1 楼 sundali 2011-03-11  
据说asynctask有一些问题,不能肆意使用,当超过5个的时候,超出的task的异步效果就会消失,变成同步的,时间有限,还没验证。

相关推荐

    断点多线程下载.

    在这个项目中,可能使用了AsyncTask或者自定义的线程池来实现多线程下载。 其次,断点续传是下载过程中的一种优化策略。当文件下载中断,例如由于网络问题或用户手动暂停,系统会记住当前已下载的文件位置,下次...

    Android开发笔记之:AsyncTask的应用详解

    AsyncTask的介绍及基本使用方法关于AsyncTask的介绍和基本使用方法可以参考官方文档和《Android开发笔记之:深入理解多线程AsyncTask》这里就不重复。AsyncTask引发的一个问题上周遇到了一个极其诡异的问题,一个小...

    在android中用jdbc连接数据库

    由于Oracle通常需要更多的系统资源,所以同样建议在后台线程中处理数据库操作。 4. **连接SQL Server** 对于SQL Server,可以使用`jtds.jar`这样的开源JDBC驱动。配置过程涉及设置URL、用户名、密码等信息,然后...

    Android-猎豹"快切App"中用到的Android开发技巧探索[附源码]

    总之,“Android-猎豹'快切App'中用到的Android开发技巧”涵盖了滑动交互、性能优化、多线程处理、UI设计和第三方库的使用等多个方面,通过分析`WellSwipe-master`源码,我们可以更深入地学习这些实用技巧,并将其...

    高焕堂 android 讲义

    此外,还可能涉及异步处理,如AsyncTask和Handler,以实现后台任务与UI线程的分离。 数据库管理方面,讲义会涉及到SQLite的使用,包括创建数据库、表,以及查询、插入、更新和删除数据的方法。 权限管理也是...

    Android中文翻译组——Android中文合集(6)

    7. **ContentProvider**:ContentProvider是Android中用于数据共享的机制,使得不同应用之间可以安全地访问和操作数据,尤其适用于跨应用的数据交换。 8. **Android权限管理**:Android系统通过权限模型来保护用户...

    Android 水波效果工程源码

    2. **Canvas与Paint**: `Canvas`是Android中用于图形绘制的基础对象,而`Paint`则用于设置绘制颜色、线条样式等属性。在水波效果中,开发者会用到`Canvas`的`drawCircle()`、`drawPath()`等方法来描绘雨滴和涟漪,...

    Android模仿微信消息列表

    2. **RecyclerView**:RecyclerView是Android中用来展示大量数据的高效组件,替代了旧版的ListView。你需要设置LayoutManager(如LinearLayoutManager或GridLayoutManager)来决定数据如何布局,同时需要创建一个...

    Android-AndroidGraphics示例

    1. **Bitmaps**: Bitmap是Android中用于存储像素数据的基本类。处理Bitmap时,需要注意内存占用,过大可能导致内存溢出。可以使用`BitmapFactory`来解码图片,并通过设置解码选项(如`inSampleSize`)来调整图片大小...

    Android仿UC浏览器项目

    6. **多线程与异步处理**: - 网络请求通常在后台线程进行,避免阻塞主线程,提高应用响应速度。可以使用`AsyncTask`或`Handler`来实现。 - 使用`WebView`的`setWebChromeClient()`和`setWebViewClient()`方法注册...

    Android SDK开发范例大全(完整版)

    2. **布局设计**:XML是Android中用来定义用户界面的主要语言。开发者可以通过XML文件创建和组织视图组件,如按钮、文本框等,并通过布局管理器(如线性布局、相对布局、网格布局等)控制组件的排列方式。 3. **...

    Android仿微博客户端

    ListView是Android中用来展示大量数据的视图组件,配合自定义Adapter可以加载动态数据,实现滑动刷新和无限滚动等功能。 5. **网络请求与数据解析**:微博客户端需要从服务器获取数据,这就涉及到HTTP请求和JSON...

    Android应用开发案例大全7-12

    最后,第12章可能涵盖Android的高级话题,如多线程与并发、JNI(Java Native Interface)与NDK(Java Native Development Kit)开发,或者是Android组件间的交互,如Intent和Fragment的使用。也可能包含关于性能优化的...

    《Android SDK范例大全 2-10源代码》

    10. **多线程与异步处理**:Android应用的UI线程不应阻塞,因此需要理解AsyncTask、Handler、Thread和IntentService等多线程技术。源代码会展示如何在后台执行耗时任务,以保持应用的响应性。 通过学习和分析这些源...

    Android图片声音显示

    - **Bitmap**: Bitmap是Android中用于存储像素数据的基本类,它代表了图片的像素数组。开发者可以通过` BitmapFactory `类来加载、解码图片资源,例如从文件、内存或网络中获取Bitmap对象。 - **ImageView**: 这...

    google android 官方教程

    Intent是Android中用来在组件间传递消息的机制,常用于启动Activity或Service,实现应用间的交互。 五、服务(Service) Service是后台运行的组件,不与用户界面直接交互,常用于执行长时间任务,如音乐播放、网络...

    仿网易android新闻客户端

    5. **RecyclerView**:RecyclerView是Android中用来展示列表数据的重要组件,它可以高效地管理大量视图复用,降低内存消耗。项目中很可能用到它来展示新闻列表。 6. **Adapter**:适配器是连接数据源和RecyclerView...

    android service下载资源,同时解压资源

    - BroadcastReceiver是Android中用来接收系统或自定义广播事件的组件。 - 在Service中发送广播,UI界面注册对应的Receiver,接收到广播后更新UI,如显示下载进度或提示下载完成。 - 需要注意,BroadcastReceiver...

    猎豹"快切App"中用到的Android开发技巧

    为了提高应用的响应速度,开发者会使用多线程技术,如`IntentService`、`HandlerThread`或`JobScheduler`,来处理耗时任务,同时保持用户界面的交互性。 10. **推送通知(Push Notifications)**: 为了保持用户...

    Android实例之音乐播放器

    其次,`ListView`是Android中用来展示可滚动列表的视图组件,非常适合用来显示歌曲列表。你可以创建一个自定义的`ListView`适配器,将歌曲信息(如歌曲名、艺术家、时长等)绑定到列表项上。`Adapter`类需要继承自`...

Global site tag (gtag.js) - Google Analytics