資源描述:
《Android學習筆記-service》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、Android學習筆記-services篇一、Service簡述Service主要執(zhí)行長時間的操作,不提供用戶界面。主要有兩種形式:Started:組件調(diào)用startservice()來啟動service,一旦啟動,service便獨立運行,并不依賴于其它組件的存在。Bound:當組件調(diào)用bindService()方法,綁定到service上時,service處于bound狀態(tài)。Boundservice允許組件與service交互:發(fā)送請求、返回結(jié)果。多個組件可綁定到同一個service,只有當所有綁定的組
2、件都unbind后,service才destroy。service可同時工作于這兩種方式,允許獨立也允許綁定:實現(xiàn)onStartCommand()允許started(獨立),實現(xiàn)onBind()允許bound(組件綁定)。對service的操作就像對activity的操作一樣。*service會運行在宿主進程的主線程中,它不會創(chuàng)建自己的線程也不會運行在獨立的進程中。因此,如果操作會阻塞或者頻繁操作CPU的話,應該為service單獨創(chuàng)建線程。二、service的創(chuàng)建為了創(chuàng)建service,必須創(chuàng)建Servi
3、ce的子類,并覆蓋一些方法。主要有:onStartCommand():當組件調(diào)用startservice()時該方法執(zhí)行,執(zhí)行之后service啟動。如果實現(xiàn)了該方法必須手動停止service(stopSelf()或者stopSelf()),如果只是提供bind的話,無需實現(xiàn)該方法。該方法必須返回Integer用來標識當service被kill后應該執(zhí)行的操作。有如下幾個數(shù)值供選用。START_NOT_STICKY不重新創(chuàng)建。START_STICKY會重新創(chuàng)建service,但不會重新遞交最后的Intent
4、。START_REDELIVER_INTENT會重新創(chuàng)建service并重新遞交最后的Intent。適合那些必須立即重新開始的service,像下載。onBind():當其它組件調(diào)用bindService()想綁定到該service上時執(zhí)行。在該方法的實現(xiàn)中必須通過返回IBinder來提供一個用戶與service交互的接口,如果不想綁定的話,就返回NULL。OnCreate():第一次創(chuàng)建service時調(diào)用。onDestroy():銷毀時調(diào)用。應該再次方法中清除所有的資源像線程、注冊的listener、r
5、eceivers等等。l如果service通過startService()啟動,則一直運行直到stopSelf()或者其他組件stopService();l如果service通過bindService()啟動,則會在組件解除綁定后銷毀。聲明service......跟activity一樣servcie也可以通過定義inte
6、ntfilter來規(guī)定可以訪問service的application。三、創(chuàng)建startedservice組件通過startservice()方法創(chuàng)建該類service,并會導致service的onStartCommand()方法被調(diào)用。當組件startService()時會傳遞一個特指該service的Intent并可以帶有一定的數(shù)據(jù)供service使用。Service將在onStartCommand()中收到這個Intent。有兩個類供我們繼承來創(chuàng)建service。Service:基本的service子
7、類,最好在其中手動創(chuàng)建線程來執(zhí)行業(yè)務操作。IntentService:Service的子類,它用工作線程,每次處理一個請求,適合不需要同時處理多個請求的service。需要有調(diào)用父類的構(gòu)造方法以及實現(xiàn)onHandleIntent(),在該方法中收到來自請求的Intent,來做業(yè)務操作。3.1擴展IntentService(不支持多線程)默認的IntentService會做如下處理:ü創(chuàng)建默認的工作線程。ü創(chuàng)建默認的工作隊列,保證每次執(zhí)行一個任務,不用擔心多線程。ü當所有request被處理后停止servic
8、e,不用手動調(diào)用。ü提供對onBind()的默認實現(xiàn),返回NULL。ü提供對onStartComment()的默認實現(xiàn),并發(fā)送Intent到onHandleIntent()。如果還需要覆蓋替他的父類方法的話,要注意調(diào)用superimplements例如覆蓋onStartCommand()必須返回默認的實現(xiàn)。@OverridepublicintonStartCommand(Intentintent,intflags