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