中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

異步任務--AsyncTask

發布時間:2020-06-29 09:25:24 來源:網絡 閱讀:316 作者:許大蟲 欄目:移動開發

    當UI(主)線程運行時間過長時,系統會出現ANR(Application No Response),為了避免這種情況,就需要將耗時操作設在非主線程中進行,這樣也能保證Android的單線程模型。

    Android提供了一個封裝好的控件--AsyncTask,來完成這些操作,其能在子線程中更新UI,能封裝,簡化異步操作

    AsyncTask<Params,Progress,Result>是一個抽象類,通常用于被繼承,繼承時需要指定以下三個泛型參數:

    1.Params:啟動任務時輸入的參數類型

    2.后臺任務執行中返回進度值的類型

    3.后臺執行任務完成后返回結構的類型

    構建AsyncTask子類有以下回調方法

異步任務--AsyncTask

    因為此例子為簡單舉例,所以AsyncTask的三個參數不需要返回值,所以設為Void

    要啟動AsyncTask還需要在主函數中調用.execute();方法

例如:異步任務--AsyncTask


    要使用AsyncTask,還需要在主函數中,定義一個先前創建好的AsyncTask的子類方法,例如上文的MyAsyncTask

    舉例如下:

異步任務--AsyncTask

異步任務--AsyncTask    

    這舉例是訪問網絡上一張圖片,把耗時的訪問加載圖片等操作放在AsyncTask中,因為訪問了網絡,不要忘了在AndroidManifest中添加訪問網絡的Permission

注意:由于一個線程沒有結束,下一個線程是沒法進行的,是需要等上一個進程完成后才能進行的,所以當想進行下一個線程時,可以采取AsyncTask.cancel(true)的方法結束當前線程,然后再執行的步驟中,判斷如果isCancelled(),就不要再繼續執行任務,直接break,然后再去進行下一個線程

    每個AsyncTask只能調用一次,多次調用會拋出異常

    AsyncTask的四個方法中,只有doInBackground()是運行在其它線程,其它三個是運行在主線程,所以doInBackground()不能直接更新UI,需要通過onPostExecute()或onProgressUpdate()方法更新UI

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

虹口区| 修武县| 荆州市| 南汇区| 兰考县| 乾安县| 开阳县| 宁远县| 张家口市| 禄丰县| 贺州市| 平山县| 永胜县| 洪洞县| 滕州市| 高清| 玉环县| 樟树市| 马山县| 息烽县| 长沙县| 汉寿县| 江西省| 肥城市| 七台河市| 方山县| 开阳县| 百色市| 黄浦区| 伊通| 石渠县| 嵊泗县| 峨边| 阳春市| 汪清县| 荃湾区| 保山市| 石景山区| 惠州市| 苗栗市| 太仆寺旗|