各位看官们大家好,上一回中咱们说的是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机制的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!