步步為營_Android開發課[5]_Service學習

來源:互聯網
上載者:User

標籤:service   android   focus   開發   life   

Focus on technology, enjoy life!—— 楊煥州 QQ:804212028
原文連結:http://blog.csdn.net/y18334702058/article/details/44624305

  • 主題:Service服務相關內容
    -Android開發中Service服務是非常重要滴,也是有一定難度滴,不怕,我們一起一步一步來看:

一、 Service簡介

Service是android系統中的四大組件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的層級差不多,但不能自己運行只能後台運行,並且可以和其他組件進行互動。service可以在很多場合的應用中使用,比如播放多媒體的時候使用者啟動了其他Activity這個時候程式要在後台繼續播放,比如檢測SD卡上檔案的變化,再或者在後台記錄你地理資訊位置的改變等等,總之服務總是藏在背景。
Service的啟動有兩種方式:context.startService() 和 context.bindService()

二、如何開發一個Service組件?

第一步:繼承Service類 public class SMSService extends Service {}
第二步:在AndroidManifest.xml檔案中的節點裡對服務進行配置:
第三步:啟動服務

啟動服務方法一:context.startService():調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。
步驟:

context.startService() 啟動流程: context.startService() -> onCreate()
-> onStart() -> Service running -> context.stopService() -> onDestroy() -> Service stop

如果Service還沒有運行,則android先調用onCreate(),然後調用onStart();
如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重複調用多次。
如果stopService的時候會直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後台運行,該Service的調用者再啟動起來後可以通過stopService關閉Service。
所以調用startService的生命週期為:onCreate –> onStart (可多次調用) –> onDestroy

啟動服務方法二:context.bindService():調用者與服務綁定在了一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點

context.bindService()啟動流程: context.bindService() -> onCreate() ->
onBind() -> Service running -> onUnbind() -> onDestroy() ->
Service stop
onBind()將返回給用戶端一個IBind介面執行個體,IBind允許用戶端回調服務的方法,比如得到Service的執行個體、運行狀態或其他動作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind->onDestroy相應退出。
所以調用bindService的生命週期為:onCreate –> onBind(只一次,不可多次綁定) –> onUnbind –>
onDestory。
在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreate,onBind,onUnbind,onDestory在一個生命週期中只能被調用一次。

三、 Service生命週期

Service生命週期很簡單,它只繼承了onCreate()、onStart()、onDestroy()三個方法
當我們第一次啟動Service時,先後調用了onCreate()、onStart()這兩個方法;當停止Service時,則執行onDestroy()方法。
這裡需要注意的是,如果Service已經啟動了,當我們再次啟動Service時,不會在執行onCreate()方法,而是直接執行onStart()方法。
它可以通過Service.stopSelf()方法或者Service.stopSelfResult()方法來停止自己,無論調用了多少次的啟動服務方法,只要調用一次stopService()方法便可以停止服務。

onCreate():
該方法在服務被建立時調用,該方法只會被調用一次,無論調用多少次startService()或bindService()方法,服務也只被建立一次。
onDestroy():
該方法在服務被終止時調用。與採用Context.startService()方法啟動服務有關的生命週期方法
onStart():
只有採用Context.startService()方法啟動服務時才會回調該方法。該方法在服務開始運行時被調用。多次調用startService()方法儘管不會多次建立服務,但onStart() 方法會被多次調用。
onBind():
只有採用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用Context.bindService()方法並不會導致該方法被多次調用。
onUnbind():
只有採用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用

生命週期圖:

四:Service和Thread的區別?

答:servie是系統的組件,它由系統進程託管(service manager);它們之間的通訊類似於client和server,是一種輕量級的ipc通訊,這種通訊的載體是binder,它是在linux層交換資訊的一種ipc。而thread是由本應用程式託管。

1).Thread:Thread是程式執行的最小單元,它是分配CPU的基本單位。可以用 Thread 來執行一些非同步操作。
2).Service:Service是android的一種機制,當它啟動並執行時候如果是Local Service,那麼對應的 Service 是運行在主進程的 main 線程上的。如:onCreate,onStart 這些函數在被系統調用的時候都是在主進程的 main 線程上啟動並執行。如果是Remote Service,那麼對應的 Service 則是運行在獨立進程的 main 線程上。因此請不要把 Service 理解成線程,它跟線程半毛錢的關係都沒有!

既然這樣,那麼我們為什麼要用Service呢?

其實這跟android的系統機制有關,我們先拿Thread來說。Thread的運行是獨立於Activity的,也就是說當一個Activity
被finish之後,如果你沒有主動停止Thread或者Thread裡的run方法沒有執行完畢的話,Thread也會一直執行。因此這裡會出現一個問題:當Activity被finish之後,你不再持有該Thread的引用。另一方面,你沒有辦法在不同的
Activity 中對同一 Thread 進行控制。

舉個例子:如果你的 Thread 需要不停地隔一段時間就要串連伺服器做某種同步的話,該 Thread 需要在 Activity
沒有start的時候也在運行。這個時候當你 start 一個 Activity 就沒有辦法在該 Activity 裡面控制之前建立的
Thread。因此你便需要建立並啟動一個 Service ,在 Service 裡面建立、運行並控制該
Thread,這樣便解決了該問題(因為任何 Activity 都可以控制同一 Service,而系統也只會建立一個對應 Service
的執行個體)。

因此你可以把Service想象成一種Message Service,而你可以在任何有Context的地方調用Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也可以在
Service 裡註冊 BroadcastReceiver,在其他地方通過發送 broadcast 來控制它,當然這些都是 Thread
做不到的。

Focus on technology, enjoy life!—— 楊煥州 QQ:804212028
原文連結:http://blog.csdn.net/y18334702058/article/details/44624305

步步為營_Android開發課[5]_Service學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.