1. 程式人生 > >安卓面試小結.

安卓面試小結.

執行execute()方法時會呼叫內部的executeOnExecutor(Excutor exec,Params... params)方法,首先內部會先執行onPreExecute()方法。接著執行exec.execute(mFuture),exec是executeOnExecutor的第一個引數,見名知意它就是傳入的執行緒池變數,它是在Executor類中初始化好的final型變數直接傳入executeOnExecutor方法的,這一步就是將mFuture扔給執行緒池。接下來會執行mFuture(Runnable)中的run方法,run方法中會呼叫Sync內部類的innerRun()方法,裡面會執行callable.call()就是mWorker的call方法,call方法中會呼叫postResult(doInBackground()),在進入這個方法就會發現它裡面就是通過handler將doInBackground()的結果傳送到主執行緒,由InternalHandler接收,若結果為MESSAGE_POST_RESULT執行onPostExecute()並關閉AsyncTask任務。若為MESSAGE_POST_PROGRESS則執行onProgressUpdate()方法,只有在doInBackground()方法中呼叫publishProgress()方法才會有MESSAGE_POST_PROGRESS這個結果,onProgressUpdate()方法才會接收到資料。