AsyncTask 与Handler+Thread

来源:互联网 发布:网络编程难吗 编辑:程序博客网 时间:2024/04/20 06:41

android AsynTask异步任务详解

  android提供了一套专门用于异步处理的类。即:AynsTask类。使用这个类可以为耗时程序开辟一个新线程进行处理,处理完时返回。
其实,AsynTask类就是对Thread类的一个封装,并且加入了一些新的方法。编程时,两者都可以实现同样的功能。本文后面将对AsynTask和Threa
1、AsynTask类结构
asysTask类主要用到的几个内部回调函数有:
  doInBackGround()

  onPreExecute()

  onPostExecute()

  onProgressUpdate()

正是这几个回调函数构成了AsynTask类的使用逻辑结构。
注意:每个AsynTask子类必须至少复写doInBackGround()方法。


2、回调逻辑关系
调用关系如下图:
  1

1>主线程调用AsynTask子类实例的execute()方法后,首先会调用onPreExecute()方法。onPreExecute()在主线程中运行,可以用来写一些开始提示代码。
2>之后启动新线程,调用doInBackground()方法,进行异步数据处理。
3>处理完毕之后异步线程结束,在主线程中调用onPostExecute()方法。onPostExecute()可以进行一些结束提示处理。
补充:在doInBackground()方法异步处理的时候,如果希望通知主线程一些数据(如:处理进度)。这时,可以调用publishProgress()方法。这时,主线程会调用AsynTask子类的onProgressUpdate()方法进行处理。


3、各个函数间数据的传递
通过上面的调用关系,我们就可以大概看出一些数据传递关系。如下:
  execute()向doInBackground()传递。
  doInBackground()的返回值会传递给onPostExecute()。
  publishProgress()向progressUpdate()传递。
 
要点:为了调用关系明确及安全,AsynTask类在继承时要传入3个泛型。第一个泛型对应execute()向doInBackground()的传递类型。第二个泛型对应publishProgress()向progressUpdate()传递的类型。第三个泛型对应doInBackground()的返回类型和传递给onPostExecute()的类型。传递的数据都是对应类型的数组,数组都是可变长的哦。可以根据具体情况使用。

Handler+Thread

private Handler handler = new Handler(){@Overridepublic void handleMessage(android.os.Message msg) {if(msg.what==0){j++;invalidate();}};};private Thread thread = new Thread(new Runnable() {public void run() {while(true){try {thread.sleep(50);handler.sendEmptyMessage(0);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});


0 0
原创粉丝点击