Service-------- 实现程序后台运行的组件
一、服务的创建
新建java类继承自Service实现onBind()方法,该方法是Service中唯一的抽象方法,然后重写onCreate()方法,onStartCommand()方法 和onDestroy()方法。 (记得在AndroidManifest.xml文件中注册服务,当然若果使用AndroidStudio自动生成的话,AS会帮我们自动注册的)
onBind() 实现服务和活动的通信
onCreate()方法在服务创建的时候调用,
onStartCommand()方法每次启动服务的时候调用
onDestroy()服务销毁的时候调用,在这里回收不需要的资源
二、服务的启动和停止
Intent intent =new Intent(this, MyService.class);
startService(intent);//启动服务
stopService(intent);//停止服务
当服务启动的时候我们可以在活动中停止它,也可以在服务里调用stopSelf() 方法
三、活动和服务之间的通信
我们创建了服务,那是需要服务来干活的,所以我们需要在服务中写自己的业务逻辑代码,所以我们需要在服务里创建一个Binder对象来对我们的业务逻辑进行监管,部分代码示例:
public class MyserviceTest extends Service {
private MyTask mbinder=new MyTask();
class MyTask extends Binder{
//具体的业务逻辑
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mbinder;
}
}
我们在服务里创建的具体逻辑怎么来控制呢,这就涉及到服务跟活动的绑定,通过活动来控制服务里的逻辑,我们在活动里新建一个 匿名类,ServiceConnection 重写方法:代码截图如下:
private MyserviceTest.MyTask myTask;
private ServiceConnection serviceConnection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myTask= (MyserviceTest.MyTask) service;
//myTask 调用服务里的方法,实现活动对service的控制
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
到这里其实还没有实现服务跟活动的绑定,我们需要书写活动中的触发事件,通过intent来绑定 部分代码如下:
Intent bindintent =new Intent(this,MyService.class);
bindService(bindIntent,connection,BIND_AUTO_CREATE);//绑定服务
unbindService(connection);//解绑服务
好到这里活动跟服务就绑定完毕,实现了服务跟活动的通信。
四、服务的生命周期
在项目中调用了服务,startService()后,服务开始启动,并回调onStartCommand()方法,如果该服务是第一次创建的话,会先调用onCreate(),每调用一次startService()方法,onStartCommand()方法都会执行一次,但是服务的实例只有一个,所以当你调用stopSelf()或者stopService() 一次,该服务就会停止。
当我们调用bindService()是,活动跟服务就会建立一个长连接,这时候回调服务中的onBind()方法,调用方可以得到onBind()返回的IBinder对象实例,从而可以建立通信。
当调用了startService()后又去调用stopService()这时服务中的onDestroy()方法就会执行,同理调用了bindService()方法之后,再调用unbindService()方法 onDestroy()方法就会执行。
当调用了startService()后又调用了bindService(),这时我们需要调用stopService()和unbindService()才可以销毁服务。
Service生命周期 (个人看法)