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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。