1. 程式人生 > >AsyncTask非同步任務類以及如何給它傳遞引數

AsyncTask非同步任務類以及如何給它傳遞引數

        在Android中很多時候程式的執行並不是一瞬間就搞定的,而是需要一定的時間。如果在UI主執行緒中執行,那麼介面就會被堵在這裡,也就是說UI主執行緒被阻塞了,這對使用者來說體驗非常差。而AsyncTask就提供了一個很好的解決方案,它可以在後臺執行一些任務,並且可以跟UI執行緒進行一些通訊。
        今天在工作中,需要寫幾個類,其中一個是處理網路連線的,第一次自己把它放在了主執行緒中,結果就是執行的時候,由於連網並不能在很短的時間內完成,導致螢幕卡住了,按選單鍵都不管用。當然,這只是我自己不成熟的寫法,如果在實際產品中出現這種情況,那你的產品就會被使用者直接說拜拜了。使用了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開發方面信手拈來的達人?自己很期待這一天,當然這個過程不會太輕鬆的。