Android Service BroadcastReceiver

來源:互聯網
上載者:User
什麼是Service :

        Service,看名字就知道跟正常理解的“服務”差不多,後台運行,可互動這樣的一個東西。它跟Activity的層級差不多,但是他

         不能自己運行,需要通過某一個Activity或者其他Context對象來調用, Context.startService() 和 Context.bindService()。

兩種啟動Service的方式有所不同 :

        如果在Service的onCreate或者onStart做一些很耗時間的事情,最好在 Service裡啟動一個線程來完成,因為Service是跑在主

        線程中,會影響到UI操作或者阻塞主線程中的其他事情。
 
什麼時候需要Service :

        比如播放多媒體的時候使用者啟動了其他Activity這個時候程式要在後台繼續播放,比如檢測SD卡上檔案的變化,再或者在後台記

        錄你地理資訊位置的改變等等,總之服務嘛,總是藏在後頭的。
 
如何使用Service :

Service的調用

        Context.startService():Service會經曆onCreate -> onStart(如果Service還沒有運行,則android先調用onCreate()然後調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重複調用多次 );stopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後台運行。該Service的調用者再啟動起來後可以通過stopService關閉Service。 注意,多次調用Context.startservice()不會嵌套(即使會有相應的onStart()方法被調用),所以無論同一個服務被啟動了多少次,一旦調用Context.stopService()或者stopSelf(),他都會被停止。補充說明:傳遞給startService()的 Intent對象會傳遞給onStart()方法。調用順序為:onCreate --> onStart(可多次調用) --> onDestroy。

        Context.bindService():Service會經曆onCreate() -> onBind(),onBind將返回給用戶端一個IBind介面執行個體,IBind允許用戶端回調服務的方法,比如得到Service啟動並執行狀態或其他動作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用 onUnbind -> onDestroyed相應退出,所謂綁定在一起就共存亡了 。

        補充說明:傳遞給bindService()的Intent對象會傳遞給onBind(),傳遞給unbindService()的Intent對象會傳遞給onUnbind()方法。 調用順序為:onCreate --> onBind(只一次,不可多次綁定) --> onUnbind --> onDestory。

注意事項:在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他 onCreate,onBind,onUnbind,onDestory在一個生命週期中只能被調用一次。還有一點,目前我沒有遇到過需要 startService和bindService互動使用的情況(我認為不會有這種需求),所以不必去考慮互動的問題,待遇到時再考慮不遲。

         adcastReceiver只能通過startService啟動Service ,因為廣播本身生命週期很短,bind的話沒有意義

Service的生命週期 :

        Service的生命週期方法比Activity少一些,只有onCreate, onStart, onDestroy我們有兩種方式啟動一個Service,他們對Service
生命週期的影響是不一樣的。

1 通過startService
   Service會經曆 onCreate -> onStart stopService的時候直接onDestroy

    如果是調用者(TestServiceHolder)自己直接退出而沒有調用stopService的話,Service會一直在後台運行。
    下次TestServiceHolder再起來可以stopService。

2 通過bindService   

   Service只會運行onCreate, 這個時候 TestServiceHolder 和TestService綁定在一起
    TestServiceHolder 退出了,Srevice就會調用onUnbind->onDestroyed所謂綁定在一起就共存亡了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.