這裡我們來看看原始碼,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...