我是靠谱客的博主 玩命外套,最近开发中收集的这篇文章主要介绍Android bindService开启服务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、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开启服务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部