概述
一、bindService开启服务
1.第一次点击按钮,会执行服务的onCreate方法和onBind方法
2.当onBind方法返回为null 的时候,onServiceConnected方法是不执行的
3.第二次点击按钮,服务没有响应
4.调用者(Activity)销毁,服务跟着一起销毁
5.服务不可以多次解绑,多次解绑会报异常
6.通过bind方式开启服务,服务不能在设置页面找到,相当于是一个隐形的服务
1.绑定服务
//点击按钮 绑定服务,开启服务的第二种方式
public void click3(View v){
Intent intent = new Intent(this,DemoService.class);
/*第一个参数,链接到DemoService这个服务
*第二个参数ServiceConnection
* 第三个参数,自动创建服务
* */
conn = new MyConn();
bindService(intent,conn,BIND_AUTO_CREATE);
}
//定义一个类,用来监视服务的状态
private class MyConn implements ServiceConnection{
//当服务链接成功调用
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
System.out.println("连接成功");
}
//失去连接调用
@Override
public void onServiceDisconnected(ComponentName componentName) {
System.out.println("失去连接");
}
}
@Override
protected void onDestroy() {
//挡Activity销毁的时候,要解绑服务
unbindService(conn);
super.onDestroy();
}
2.解绑服务
//点击按钮,手动解绑服务
public void click4(View v){
unbindService(conn);
}
二、为什么要引入binService
1.目的,为了调用服务里面的方法
2.步骤(办证案例为例)
【1】在服务内部定义一个方法,让Activity去调用
//办证的方法
public void banZheng(int money){
if(money>1000){
Toast.makeText(getApplicationContext(),"我是领导,把证给你办了",Toast.LENGTH_SHORT).shwo();
}else{
Toast.makeText(getApplicationContext(),"这点钱还想办事。。。",Toast.LENGTH_SHORT).shwo();
}
}
【2】在服务内部定义一个中间人对象(IBinder)
public class MyBinder extends Binder{
public void callBanZheng(int money){
//调用方法
banZheng(money);
}
}
【3】把定义的中间人对象(IBinder)在onBind方法里面返回
public IBinder onBind(Intent intent) {
return new MyBinder;
}
【4】在MainActivity的onCreate方法里面调用 bindservice ,目的是为了获取我们定义的中间人对象(IBinder)
Intent intent = new Intent(this,BanZhengService.class);
//连接服务
conn = new MyConn();
bindService(intent,conn,BIND_AUTO_CREATE);
【5】获取中间人对象(IBinder)
//监视服务的状态
private class MyConn implements ServiceConnection{
//当服务链接成功是调用
@Override
public void onServiceConnected(ComponentName name;IBinder sevice){
//获取中间人对象(IBinder)
myBinder = (MyBinder)service;
}
//失去连接
@Override
public void onServiceDisconnected(ComponentName name){
}
}
【6】拿到了中间人对象(IBinder)就可以间接地调用到服务里面的方法
【7】当Activity销毁的时候解绑服务
public void click(View v){
myBinder.callBanZheng(10);
}
三、通过接口方式调用服务里面的方法
接口可以隐藏代码内部的细节,让程序员暴露自己只想暴露的方法
1.定义一个接口,把想暴露的方法都定义在接口里面
2.我们定义的中间人对象(IBinder)实现我们自己定义的接口
3.在获取中间人对象(IBinder)的时候,获取的是一个接口类型
最后
以上就是玩命外套为你收集整理的Android bindService开启服务的全部内容,希望文章能够帮你解决Android bindService开启服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复