非同步處理總結

2021-08-21 19:09:25 字數 1350 閱讀 2330

asynctask入門:

intentservice:

今天要說的intentservice提供的功能也很類似,都是來處理非同步工作的。

工作流程也非常簡單,客戶端通過startservice(intent) 方法來呼叫,服務啟動後,開啟worker執行緒來順序處理intent的任務。注意這裡,乙個intentservice可以處理多個任務,只不過是乙個接著乙個的順序來處理的;asynctask通常情況是每個任務啟動乙個新的asycntask來工作,乙個asynctask只能使用一次,當你想再次使用的話,只好再new乙個任務,否則要報異常的。從表象上看,這是兩者的區別。當任務完成後,intentservice自動停止。

intentservice是繼承自service的,從原始碼上看,它是service、handlerthread和handler的強強聯合。原始碼也比asynctask簡單,有興趣的童鞋可以去看看。

下面說說它的用法,和asynctask一樣,使用intentservice必須要寫乙個類然後繼承它。

因為intentservice本身是繼承自service,所以在使用的時候要先在androidmanifest.xml中註冊,否則報錯:unable to start service intent not found

intentservice有7個方法,其中最重要的是onhandleintent(),在這裡呼叫worker執行緒來處理工作,每次只處理乙個intent,像上面描述的,如果有多個,它會順序處理,直到最後乙個處理完畢,然後關閉自己。一點都不用我們操心,多好。

再介紹另乙個很有意思的方法,setintentredelivery()。從字面理解是設定intent重投遞。如果設定為true,onstartcommand(intent, int, int)將會返回start_redeliver_intent,如果onhandleintent(intent)返回之前程序死掉了,那麼程序將會重新啟動,intent重新投遞,如果有大量的intent投遞了,那麼只保證最近的intent會被重投遞。這個機制也很好,大家可以嘗試著用。

下面寫個小例子,這個例子和之前asynctask的一樣,都是模擬處理耗時任務的。這裡加上了廣播機制來傳遞訊息。

androidmanifest.xml:-------------------------->

layout.xml---------------------->

<?xml version="1.0" encoding="utf-8"?>

activity

intentservice

}從這兩篇文章中可以看到,andorid提供這兩個處理耗時任務的工具,為我們開發者帶來了極大的便利。跟隨原始碼,又可以讓我們的水平上公升乙個檔次。看來,android提供的文件和例子就是乙個寶庫,我們要好好的利用起來!

AsyncTask 非同步處理

1,object,用於指定doinbackground的引數 2,integer,用於指定onprogressupdate的引數 3,uri,用於指定doinbackground的返回型別和onpostexecute的引數型別 public class updatetask extends asyn...

AsyncTask非同步處理

非同步處理的目的 完成任務的同時不阻塞主線程 ui執行緒 涉及handler looper message thread四個物件。實現非同步的流程 主線程啟動thread 子執行緒執行並生成message looper獲取message並傳遞給handler handler逐個獲取message並進...

非同步處理日誌

把所有的info日誌,採用非同步模式來處理 環境日誌檔案的io阻塞 public class logtask implements runnable override public void run catch exception e public static void loginfo strin...