一般情况下在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>{@Overrideprotected 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;}@Overrideprotected void onProgressUpdate(Integer... progress) {Log.d("onProgressUpdate", "progress:"+ progress[0]);    }@Overrideprotected 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.

更多相关文章

  1. Android 线程池框架、Executor、ThreadPoolExecutor详解
  2. :Handler方法小结(在线程中更新UI和了解HandlerThread类的用法)
  3. android线程池原理和实现
  4. [android 多线程]一些帖子与文章ProgressDialog, AsyncTask, Thr
  5. Android客户端性能参数监控

随机推荐

  1. Android常用修改
  2. Android 之如何添加 android private lib
  3. 关于main.xml中使用ImageView引起Missing
  4. Android RIL代码详细分析
  5. Android design support library 通过gra
  6. android里设置图片透明。
  7. Android设置ScrollView滚动到底部和顶部
  8. Android启动流程分析(八) 解析init.rc的a
  9. Android中 RatingBar评分条的使用
  10. Android自定义进度条-带文本(文字进度)的