一起Talk Android吧(第一百八十六回:Android的中AsyncTask机制五)

各位看官们大家好,上一回中咱们说的是Android中AsyncTask机制的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在前面章回中通过具体的代码演示了如何使用AsyncTask,这一回中我们分析一下AsyncTask的生命周期,更加准确的说是它运行时的状态,分析的方法主要是通过log来跟踪,具体的代码可以参考上一回中的内容,我们主要分析一下代码运行时的log,下面是具体的log,请大家参考:

    --------- beginning of main
//程序开始运行,主线程所在的Activity回调onCreate方法,子线程状态为PENDING
 I/AsyncEx: onCreate:  start Asnyc Task Thread: Thread[main,5,main]
 I/AsyncEx: onCreate: before start Asnyc Task States = PENDING
 I/AsyncEx: onResume:  Status = PENDING

//按下Button启动子线程,子线程状态RUNNING,子线程名称也与主线程不同
 D/AsyncEx: onPreExecute: Statue = RUNNING Thread: Thread[main,5,main]
 D/AsyncEx: doInBackground:  status = RUNNING Thread: Thread[AsyncTask #3,5,main]
 D/AsyncEx: onProgressUpdate:  Thread: Thread[main,5,main]
 D/AsyncEx: onProgressUpdate:  process = 0 status = RUNNING
 D/AsyncEx: onProgressUpdate:  Thread: Thread[main,5,main]
 D/AsyncEx: onProgressUpdate:  process = 1 status = RUNNING
 D/AsyncEx: onProgressUpdate:  Thread: Thread[main,5,main]
 D/AsyncEx: onProgressUpdate:  process = 2 status = RUNNING
 D/AsyncEx: onProgressUpdate:  Thread: Thread[main,5,main]
 D/AsyncEx: onProgressUpdate:  process = 49 status = RUNNING
 D/AsyncEx: onPostExecute: res = true status = RUNNING Thread: Thread[main,5,main]
//子线程运行完成,状态变为FINISHED,按下Backup键退出程序并且销毁子线程
 I/AsyncEx: onPause: status = FINISHED
 I/AsyncEx: onDestroy:  task is  not canceled
 I/AsyncEx: onDestroy:  task state: FINISHED

从log中可以看到AsyncTask运行时的过程主要分为三个状态:

  • PENDING
  • RUNNING
  • FINISHED.

在调用execute启动子线程前为PENDING状态,调用execute后一直到onPostExecute结束前都是RUNNING状态,onPostExecute调用结束后转变为FINISHED状态。

看官们,通过跟踪log可以清楚地看到AsyncTask的状态,进而可以更好地理解子线程的运行过程。不过大家不需要过多地关注这些状态,毕竟它是异步的,我们介绍它的状态侧重点还在于帮助大家理解它的运行过程,希望大家不要本末倒置。

最后有看官说,我们在介绍Handler机制时分析了它的源代码,是不是也要分析一下AsnycTask的源代码呢?是的,不过不是现在,一则是AsyncTask的源代码经常在变化,再则是它需要Java中多线程相关的知识做铺垫,等我们把铺垫打好后就开始分析它的源代码,请大家耐心等待。

各位看官,关于Android中AsnycTask机制的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

发布了538 篇原创文章 · 获赞 132 · 访问量 63万+

猜你喜欢

转载自blog.csdn.net/talk_8/article/details/105623007