學(xué)習(xí)Android開發(fā)有哪些技巧呢
發(fā)布者:網(wǎng)上發(fā)布
??在Android中,線程分為主線程和子線程。主界面用于與用戶交互,進(jìn)行UI的相關(guān)操作,而子線程則負(fù)責(zé)耗時操作。如果在主線程中進(jìn)行耗時操作,就會使程序無法及時的響應(yīng)。因此,耗時操作必須放在子線程中進(jìn)行。為了方便你快速清晰地了解線程與安卓開發(fā),本文將從以下幾個方面為你闡述
??1 主線程和子線程
??主線程是指進(jìn)程所有用的線程,在Android中即指進(jìn)行UI與用戶交互的線程就是主線程。因此在Android開發(fā)中,需要盡可能的把耗時操作,網(wǎng)絡(luò)請求訪問操作,數(shù)據(jù)庫讀取操作等放在子線程,以避免主線程長期處于占用狀態(tài)以降低用戶體驗(yàn)。系統(tǒng)要求網(wǎng)絡(luò)訪問必須在子線程中進(jìn)行,否則會拋出NetworkOnMainThreadException異常。
??2 線程形態(tài)
??Android中的線程形態(tài)有傳統(tǒng)的Thread,AsyncTask,HandlerThread和IntentService。
??AsyncTask封裝了Thread和Handler,必須在主線程進(jìn)行調(diào)用,它可以在子線程中執(zhí)行任務(wù),然后將執(zhí)行的結(jié)果傳遞給主線程并更新UI。但AsyncTask并不適合執(zhí)行特別耗時的任務(wù)。
??AsyncTask是一個泛型類,提供了三個泛型參數(shù):Params,Progress和Result。
??Params表示參數(shù)的類型
??Progress表示后臺任務(wù)的執(zhí)行進(jìn)度的類型
??Result表示后臺任務(wù)返回結(jié)果的類型
??AsyncTask的聲明:
??2.1.2 方法:
??AsyncTask提供了一些核心方法:
??onPreExecute在主線程中調(diào)用用來進(jìn)行異步任務(wù)的準(zhǔn)備操作。
??doInBackground(Params……params)在執(zhí)行完onPreExecute后進(jìn)行子線程任務(wù)時自動調(diào)用,Params表示異步任務(wù)的輸入?yún)?shù)。在方法中可以通過publishProgress更新任務(wù)的完成進(jìn)度,同時在結(jié)束調(diào)用后會返回結(jié)果給onPostExecute方法。
??onProgressUpdate(Params……params)在主線程中用于顯示任務(wù)進(jìn)行的進(jìn)度,在publishProgress方法中被調(diào)用。
??onProgressExecute(Result result)在主線程中用戶獲取任務(wù)結(jié)束后回返的結(jié)果,即doInBackground的返回值。
??onCancelled在主線程中執(zhí)行,當(dāng)異步任務(wù)被取消后不會執(zhí)行onProgressExecute方法而會執(zhí)行onCancelled方法。