首先從android3.0開始,系統要求網路訪問必須在子執行緒中進行,否則網路訪問將會失敗並丟擲networkonmainthreadexception這個異常,這樣做是為了避免主線程由於耗時操作所阻塞從而出現anr現象。asynctask封裝了執行緒池和handler。asynctask有兩個執行緒池:serialexecutor和thread_pool_executor。前者是用於任務的排隊,預設是序列的執行緒池:後者用於真正的執行任務。asynctask還有乙個handler,叫internalhandler,用於將執行環境從執行緒池切換到主線程。asynctask內部就是通過internalhandler來傳送任務執行的進度以及執行結束等訊息。
asynctask排隊執行過程:系統先把引數params封裝為futuretask物件,它相當於runnable,接著futuretask交給serialexcutor的execute方法,它先把futuretask插入到任務佇列tasks中,如果這個時候沒有正在活動的asynctask任務,那麼就會執行下乙個asynctask任務,同時當乙個asynctask任務執行完畢之後,asynctask會繼續執行其他任務直到所有任務都被執行為止。
關於執行緒池,asynctask對應的執行緒池threadpoolexecutor都是程序範圍內共享的,都是static的,所以是asynctask控制著程序範圍內所有的子類例項。由於這個限制的存在,當使用預設執行緒池時,如果執行緒數超過執行緒池的最大容量,執行緒池就會爆掉(3.0預設序列執行,不會出現這個問題)。針對這種情況。可以嘗試自定義執行緒池,配合asynctask使用。
獲取Android原始碼
git是linux torvalds為了幫助管理linux核心開發而開發的乙個開放原始碼的公布式版本控制軟體。在git版本控制系統中,每乙個工作目錄都包含乙個完整倉庫,它們支援離線工作。android是由kernel dalvik bionic build等多個git專案組成的,所以android專...
android 原始碼更新
copy一篇在這裡,操作是有效的。另外其實用git還是有很多經驗了,所以這篇對比了下讚!官方的總是最靠譜 另乙個靠譜的就是它了 copy from 檢視可切換的分支 cd repo manifests git branch a cut d f 3 以 gingerbread release 分支為例...
Android原始碼版本
分享一下 通過修改system build.prop這個檔案來玩只改部分幾個 支援中文任你改 手機型號 品牌 內部版本號 android版本 d395o 一起搞基 純粹娛樂分享 9100 4.0 2.3.6 親測成功.首先你需要有一台root過的機器以及re管理器 開啟re管理器,進入system資...