service的启动方式有两种:
startService():生命周期 startService()---onCreate()---onStartConmom()---onDestroy();
这种方式启动的话,需要注意一下几个问题:
1.:当我们通过startService被调用以后,多次在调用startService(),onCreate()方法也只会被调用一次,而onStartConmon()
会被多次调用当我们调用stopService()的时候,onDestroy()就会被调用,从而销毁服务。
2.当我们通过 startService启动时候,通过intent传值,在onStartConmon()方法中获取值的时候,一定要先判断intent是否为 null。
bindService():生命周期 bindService()---onCreate()---onBind()---unBind()---onDestroy();
bindService()这种方式进行启动service好处是更加便利activity中操作service,比如加入service中有几个方法,a,b ,如果要在
activity中调用,在需要在activity获取ServiceConnection对象,通过ServiceConnection来获取service中内部类的类对象,然后通过这个类对象就可以调用类中的方法,当然这个类需要继承Binder对象。
`private MyBindService service;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
MyBindService.MyBinder myBinder = (MyBindService.MyBinder) binder;
service = myBinder.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("Kathy", "ActivityA - onServiceDisconnected");
}
};`
下面代码是service的类部类
public class MyBinder extends Binder { public MyBindService getService() { return MyBindService.this; } }
bindService的特点
(1)每次调用服务必须首先bindService,执行unbindService后不能调用;
(2)服务的生命周期受限于UI线程。一旦应用(Activity)终止,服务将onDestory销毁;
(3)可以在绑定后调用服务里的功能。
混合调用(须按顺序操作):
(1)首先在主界面创建时,startService(intent)启动方式开启服务,保证服务长期后台运行;
(2)然后调用服务时,bindService(intent, connection, BIND_AUTO_CREATE)绑定方式绑定服务,这样可
以调用服务的方法;
(3)调用服务功能结束后,unbindService(connection)解除绑定服务,置空中介对象;
(4)最后不再需要服务时,stopService(intent)终止服务。
网友评论