2013年10月21日

Android─Service啟動方式

當我們在使用Smartphone時,所看到的畫面都是在前端執行的程式,但還是有許多工作需要在背景執行,例如:撥放mp4下載檔案
這種需要在背景執行的功能,Android提供了一種方法─Service
讓開發者可以在Service撰寫要提供使用者在背景執行的功能。

要創立一個Service首先我們現在Manifest宣告
test_service為一個Service
程式碼如下
<service android:name=".test_service"/>

呼叫Service有兩種方式

1.Activiy透過startService去執行Service,我們將所需要在Service執行的功能寫在Service的onStartCommand裡 

2.Activity透過bindService來執行Service,我們需要在Service內加入ibinder物件,如此Activity則可透過ibinder物件使用Service裡public的method

下面的範例,我們將丟一個正整數,透過Service去幫我們做加總的動作

1.使用startService

Activity程式碼
Intent intent = new Intent(this, test_service.class);
intent.putExtra("number",10);
startService(intent);

Service程式碼
public class Uninstall_Service extends Service {
  private int getnum,total=0;
  @Override
  public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Log.i("service", "enter the service");
    getnum=intent.getExtras().getInt("number");  
      for(int a=1; a<=getnum; a++)
      {
        total=total+a;    
      } 
    Log.i("service","the answer is" +total);  
  }
}

Service會在onStart裡面去做整數加總的動作

2. bind service的使用方式
小弟才疏學淺,怕解說的不詳細
此連結有對bind service使用有詳細的解說,大家可以參考


最後來簡述一下Service destory的狀況
1.使用startService,activity與service是處在獨立的狀態,所以當activity destory,service並不會跟著destory,還是會持續在背景執行;直到service自己停止,或者可由任一個activity使用stopService()。

2. 使用bind service,service與activity的ibind object是有關連的,所以當activity destory時,service也會跟著destory。 另外有一點需要注意的是,當activity進入pause 或 stop,要先unbind service,當resume時,再重新bind service。

參考連結1
參考連結2
參考連結3
參考連結4



沒有留言:

張貼留言