這種需要在背景執行的功能,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