android非同步任務之IntentService

2021-07-24 10:36:29 字數 2532 閱讀 3113

這裡我們來看看原始碼,intentservice的**很少,很簡單。

在第一次oncreat的時候,建立了乙個handlerthread。然後建立了乙個handler,將handlerthread的loop傳了進去,相當於這個handler的執行已經是非同步了。

1: oncreat()

handlerthread thread

=new handlerthread("intentservice["

+ mname +

"]");

thread

.start();

mservicelooper =

thread

.getlooper();

mservicehandler =

new servicehandler(mservicelooper);

2: onstart

//在這裡將傳入的intent資訊以message用handler傳送出去。

message msg = mservicehandler.obtainmessage();

msg.arg1 = startid;

msg.obj = intent;

mservicehandler.sendmessage(msg);

@override

public

intonstartcommand(@nullable intent intent, int flags, int startid)

3: handler

private

final

class

servicehandler

extends

handler

@override

public

void

handlemessage(message msg)

}

這裡差不多就看到結束了,那麼,我們自己寫個服務繼承intentservice的話,就會實現onhandleintent這個方法。然後我們只需要在裡面去執行我們的非同步操作就可以了。

使用:和服務請求使用一樣。

//在需要的地方,直接開啟服務即可

intent intent=new intent(this, myintentservice.class);

intent.putextra("type",myintentservice.type1);

startservice(intent);

intent intent2=new intent(this, myintentservice.class);

intent2.putextra("type",myintentservice.type2);

startservice(intent2);

/**

* 服務類

*/public

class

myintentservice

extends

intentservice

@override

protected

void

onhandleintent(intent intent) else

if (str.equals(type2))

}private

void

text1()

private

void

text2()

}

使用是很簡單的是吧?那麼我們來看看執行效果:

然後來看看正在執行的服務:

說說注意的事項!官網也有介紹

1) 這個後台執行,不能影響ui,如果需要執行完畢之後更新ui,則需要用廣播的方式來傳送廣播給介面更新ui,廣播使用方式之一loaclbroadcastmanager 。

2) 這個是有執行順序的,且執行過程中不能被中斷,後面的訊息需要等待前面執行完畢,這裡不需要說明,handler是按佇列來執行的,還有這裡畢竟只使用了乙個執行緒(handlerthread)。

private

void text1()

private

void text2()

和前面執行順序一樣,先執行text1再執行text2,但是在執行text1的時候,我休息了10秒鐘。看看輸出:

確實是等待第乙個執行完之後再執行的第二個。所以注意,intentservice需要執行乙個能執行完成的任務,不然也就失去了它本身的意義。

Android非同步任務 AsyncTask 筆記

像handler訊息傳遞機制類似,android官方提供的專門用於處理耗時超作,並及時更新ui元件的乙個抽象類.常用於耗時操作,如網路操作,資料庫操作,等大量的耗時操作.asynctask是個抽象類,這一屬性決定我們運用時要繼承該類,並實現該類中的方法.params 1.execute params...

Android 非同步任務AsyncTask

handler本身並沒有建立子執行緒。如果要在子執行緒中執行任務,必須使用者自己建立子執行緒,然後在子執行緒中呼叫handler.sendmessage 更新ui。android提供另乙個類asynctask執行這樣的非同步任務。asynctask類會建立子執行緒,其內部封裝了handler。asy...

Android 非同步任務AsyncTask

首先,繼承asynctask 引數說明如下 params標示輸入引數。progress標示子執行緒執行的百分比。result標示返回值型別。根據需求實現如下方法 onpreexecute 方法。doinbackground params.params 方法。publishprogress param...