Android四大組件之Service

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();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章