Service


1.Service是一個應用程序組件(component),與Activity,BroadcastReceiver在一個層次;

2.Service沒有圖形界面;

3.通常用來處理一些耗時較長的操作(下載,播放音樂..),如果用BroadcastReceiver處理超過10s的操作通常會報錯;

4.可以使用Service更新ContentProvider,發送Intent以及啟動系統的通知等等

&

1.Service不是一個單獨的進程

2.Service不是一個單獨的線程

所以service和整個程序是在同一個進程和線程中運行的。

進程擁有獨立的內存空間以及一些資源,一個進程里面可以包含多個線程(至少一個),一個應用程序最少有一個進程。

對於多個線程,CPU采用時間片調度算法使得線程之間不停快速切換,使我們感覺程序好像在同時運行。

 

生命周期:

注:Android2.0以后的版本,onStart()已經被onStartCommand()代替了

Service與Activity一樣,也有一個從啟動到銷毀的過程,但Service的這個過程比Activity簡單得多。Service啟動到銷毀的過程只會經歷如下3個階段:

創建服務

開始服務

銷毀服務

一個服務實際上是一個繼承android.app.Service的類,當服務經歷上面3個階段后,會分別調用Service類中的3個事件方法進行交互,這3個事件方法如下:

  1. public void onCreate(); // 創建服務
  2. public void onStart(Intent intent, int startId); // 開始服務
  3. public void onDestroy(); // 銷毀服務

一個服務只會創建一次,銷毀一次,但可以開始多次,因此,onCreate和onDestroy方法只會被調用一次,而onStart方法會被調用多次。

 

例如,我在onCreate()寫了一個toast:

Toast.makeText(context, "it's oncreate()", Toast.LENGTH_LONG).show();

用短信觸發這個Service,在這個程序沒有運行的時候,用短信觸發之后,toast顯示了“it's oncreate()”,

然而再次嘗試用短信觸發這個程序的時候,不再顯示了,因為這個程序在后台運行了,service已經被啟用。

當我們把這個程序kill掉之后,則可以重新通過短信觸發oncreate里的toast。

而如果在onStartCommand()里面寫一個toast:

Toast.makeText(context, "it's onStartCommand()", Toast.LENGTH_LONG).show();

那么每次用短信觸發的時候就都會出現"it's onStartCommand()"的toast,不會出現只toast一次的情況。

注意這個toast要寫在return語句的前面,不然報錯,return后面好像是不能寫字的。

 

 

LINKS:

BroadcastReceiver調用Service:

http://www.cnblogs.com/larrylawrence/p/3421629.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM