服务的特点是可以长期后台运行,一般没有应用程序界面,不容易被系统回收,即使被回收当内存足够时还会复活。当我们需要某些程序一直在后台运行时就用到了service。
1)用startService的方式开启服务:
startService---stopService
Oncreate()--> onStartCommand() --> ondestroy()
1.如果服务已经被创建,就不会再去执行oncreate方法了。
2.多次的开启服务只会执行 onStartCommand()
3.服务只能够被销毁一次,不能够被重复的销毁.
2)用bindService的方式开启服务:
bindService---unbindService
onCreate()-->onbind()-->onUnbind()-->ondestroy();
1. 如果服务被绑定了,并且没有解绑,服务就不会停止了。(停止不了了)
2. 如果服务被采用start的方式开启过,并且没有stop过,采用unbind服务, 不会让服务停止。
1.写个类 去继承 Service
publicclass HelloService extends Service {
2.重新 onCreate方法, 然后在oncreate方法中实现业务逻辑代码
这里实现的功能, 一般都是需要在后台一直 长期的运行的事儿.
例如:下载,放音乐,
3.服务写好了之后,需要到清单文件中进行注册.
<service android:name="com.itheima.service.quickstart.HelloService">service>
注意:服务也是运行在主线程中, 服务不能够被阻塞. 如果要干耗时的事儿.那么也需要放到
子线程中去.
只有绑定一个服务,才能调用该服务中的方法.
第一步:
编写服务类
publicclass LocalService extends Service
第二步:
声明接口,在这个接口中声明一个方法.
publicinterface Ibinder {
public void callMethodInService(String account,int money);
}
第三步:
声明MyBinder类,记得将小MyBinder 私有,然后让MyBinder去继承 Binder,实现
Ibinder接口.
private class MyBinder extendsBinderimplements Ibinder {
@Override
public void callMethodInService(String account,int money) {
//调用服务中的方法
methodInService(account, money);
}
第四步:
在onBind方法中 returnMyBinder的实例
@Override
public IBinder onBind(Intent intent) {
System.out.println("服务绑定了...");
//需要返回 IBinder的实例对象
return new MyBinder ();
}
第五步:
绑定服务调用服务中的方法
Intent intent =new Intent();
intent.setClass(this, LocalService.class);
conn = new MyServiceConnection();
bindService(intent,conn,BIND_AUTO_CREATE);
第六步:
private class MyServiceConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinderservice) {
MyBinder = (Ibinder ) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
第七步:
//调用服务中的方法
public void callService(View v){
MyBinder .callMethodInService("lulu", 666666);
}
第八步:
释放资源
//解绑服务
public void unbindService(View v){
unbindService(conn);
conn=null;
}