1.service如windows下面的服務是差不多的,沒有用戶界面,只是在後臺工作,比如 音樂播放、下載可以使用Service
2.Activity怎麼和service綁定,怎麼在activity中啓動自己對應的service:
service本身不能自己啓動,要調用其他方法才能啓動service。
有如下兩種方法:
startService():使用這個方法時,service與啓動者是沒有關係的,只是單純的啓動service,若啓動者退出了,service依舊在後臺運行。(如音樂播放,即使退出了程序,音樂還在播放着)
bindService():使用此方法時,顧名思義,就是把啓動者與service綁定在一起了,啓動者退出,service也跟着停止
3.service的生命週期:
1)startService方式的生命週期:
啓動時,調用startService方法 –>onCreate() –> onStart()
停止時,調用stopService 方法 –> onDestroy()
2)bindService方式的生命週期:
綁定時,調用bindService方法 ->onCreate() –> onBind()
解綁定時,調用unbindService方法 –>onUnbind() –> onDestory()
4.如果這幾個方法交織在一起的話,會出現什麼情況呢?
一個原則是Service的onCreate的方法只會被調用一次,就是你無論多少次的startService又bindService,Service只被創建一次。
1)如果先是bind了,那麼start的時候就直接運行Service的onStart方法,如果先是start,那麼bind的時候就直接運行onBind方法。
2)如果service運行期間調用了bindService,這時候再調用stopService的話,service是不會調用onDestroy方法的,service就stop不掉了,只能調用UnbindService, service就會被銷燬
4)如果一個service通過startService 被start之後,多次調用startService 的話,service會多次調用onStart方法。多次調用stopService的話,service只會調用一次onDestroyed方法。
5)如果一個service通過bindService被start之後,多次調用bindService的話,service只會調用一次onBind方法。多次調用unbindService的話則會拋出異常
5.Activity如果要調用Service裏面的方法,一般是兩種啓動Service的方式一起使用,代碼如下:
1.創建一個類繼承Service,在MyService裏創建一個內部類繼承Binder:
public class MyService extends Service { @Override public IBinder onBind(Intent intent) { // TODO 自動生成的方法存根 return new MyBinder(); } private void log(){ Log.e("TAG","來自Service的方法"); } public class MyBinder extends Binder { public void getData() { log(); } } }
2.在Activity中通過啓動服務和綁定服務,得到MyBinder對象
Intent service = new Intent(this, Time.class); startService(service); //啓動服務 bindService(service, conn, Context.BIND_AUTO_CREATE); super.onStart(); //綁定服務
private MyBinder myBinder; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName arg0) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { myBinder = (MyBinder) service; //綁定服務成功時,會調用次方法,這樣就得到了MyBinder對象 } }; 3.通過MyBinder對象就可以直接調用Service裏的方法了: myBinder.getData();