AsyncTask非同步任務類以及如何給它傳遞引數
阿新 • • 發佈:2019-01-04
在Android中很多時候程式的執行並不是一瞬間就搞定的,而是需要一定的時間。如果在UI主執行緒中執行,那麼介面就會被堵在這裡,也就是說UI主執行緒被阻塞了,這對使用者來說體驗非常差。而AsyncTask就提供了一個很好的解決方案,它可以在後臺執行一些任務,並且可以跟UI執行緒進行一些通訊。
今天在工作中,需要寫幾個類,其中一個是處理網路連線的,第一次自己把它放在了主執行緒中,結果就是執行的時候,由於連網並不能在很短的時間內完成,導致螢幕卡住了,按選單鍵都不管用。當然,這只是我自己不成熟的寫法,如果在實際產品中出現這種情況,那你的產品就會被使用者直接說拜拜了。使用了AsyncTask之後,即使任務消耗的時間再多,也不會影響到UI介面了。
通常AsyncTask是這樣的:
其中,param2和param3分別是progress和result,即一個過程一個結果。通常param1才是我們最關心的,因為這個才是傳遞進來,需要做一些操作的引數。那麼如何使用這個引數呢?比如你想要傳遞一個String型別的,那麼應該這麼玩:
也就是說,實際上得到的是str[]陣列的第一個值。
好吧,自己也感覺說的亂亂的,還是跟以前說的一樣,這裡純粹是無量閣電子書自己學些Android的記錄,對其他人的幫助不大,至少短時間內這種情況很難改變。也許在遙遠的將來,我也能成為一個在Android開發方面信手拈來的達人?自己很期待這一天,當然這個過程不會太輕鬆的。
今天在工作中,需要寫幾個類,其中一個是處理網路連線的,第一次自己把它放在了主執行緒中,結果就是執行的時候,由於連網並不能在很短的時間內完成,導致螢幕卡住了,按選單鍵都不管用。當然,這只是我自己不成熟的寫法,如果在實際產品中出現這種情況,那你的產品就會被使用者直接說拜拜了。使用了AsyncTask之後,即使任務消耗的時間再多,也不會影響到UI介面了。
通常AsyncTask是這樣的:
AsyncTask(param1, param2, param3) { onPreExecute() { } doInBackground(param1) { ...... } onProgressUpdate(param2) { } onPostExecute(param3) { } }
其中,param2和param3分別是progress和result,即一個過程一個結果。通常param1才是我們最關心的,因為這個才是傳遞進來,需要做一些操作的引數。那麼如何使用這個引數呢?比如你想要傳遞一個String型別的,那麼應該這麼玩:
AsyncTask(String, param2, param3) { String str1 = null; onPreExecute() { } doInBackground(String str) { str1 = str[0]; ...... } onProgressUpdate(param2) { } onPostExecute(param3) { } }
也就是說,實際上得到的是str[]陣列的第一個值。
好吧,自己也感覺說的亂亂的,還是跟以前說的一樣,這裡純粹是無量閣電子書自己學些Android的記錄,對其他人的幫助不大,至少短時間內這種情況很難改變。也許在遙遠的將來,我也能成為一個在Android開發方面信手拈來的達人?自己很期待這一天,當然這個過程不會太輕鬆的。