通过接口方式调用服务里面的方法

  接口可以隐藏代码内部的细节 让程序员暴露自己只想暴露的方法

  (6)定义一个接口 把想暴露的方法都定义在接口里面

(7)我们定义的中间人对象 实现我们定义的接口

(8)在获取我们定义的中间人对象方式变了

public interface Iservice {

    //把领导想暴露的方法 都定义在接口里面
    public void callBanZheng(int money);

    public void callPlayMaJiang();
}
public class MainActivity extends Activity {

    private Iservice myBinder; //这个是我们定义的中间人对象
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//        //开启服务
        Intent intent = new Intent(this,TestService.class);
        //连接服务 TestService
        MyConn conn = new  MyConn();
        //绑定服务
        bindService(intent, conn, BIND_AUTO_CREATE);

    }

    //点击按钮 调用TestService 服务里面的办证方法
    public void click(View v) {
        //通过我们定义的中间人对象 间接调用服务里面的方法
        myBinder.callBanZheng(1020000);
//        myBinder.callPlayMaJiang();
//        myBinder.callXiSangNa();

        myBinder.callPlayMaJiang();

    }

    //监视服务的状态
    private class MyConn implements ServiceConnection{

        //当连接服务成功后
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {

            //[4]获取我们定义的中间人对象
            myBinder = (Iservice) service;
        }

        //失去连接
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }

    }

}
public class TestService extends Service {

    //当bindservice
    @Override
    public IBinder onBind(Intent intent) {

        //[3]把我们定义的中间人对象返回
        return new MyBinder();
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    //测试方法
    public void banZheng(int money){

        if (money > 1000) {
            Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
        }else{

            Toast.makeText(getApplicationContext(), "这点钱 还想办事", 1).show();
        } 

    }

    //打麻将的方法
    public void playMaJiang(){

        System.out.println("陪客户打麻将");
    }

    //洗桑拿的方法
    public void 洗桑拿(){
        System.out.println("洗桑拿");
    }

    //[1定义一个中间人对象 ]

    private  class MyBinder extends Binder implements Iservice{

        //[2]定义一个方法 调用办证的方法
        public void callBanZheng(int money){
            banZheng(money);

        }
        //定义一个调用打麻将的方法
        public void callPlayMaJiang(){
            playMaJiang();
        }

        //调用洗桑拿的方法
        public void callXiSangNa(){
            洗桑拿();
        }

    }

}
时间: 2024-10-13 03:58:26

通过接口方式调用服务里面的方法的相关文章

远程调用服务里的方法service,进程间通信adil的学习

1当一个进程需要调用另外一个进程的方法时候,进程可以通过aidl文件以接口的方式将方法抛出.比如android没有对外提供挂电话的方法,若用户想要调用这个方法就必须与电话管理这个应用程序通信,调用挂电话的方法. 2.下面我就举例一个demo调用远程服务里的方法.为了验证service能否单独启动,这个demo启动了2个远程服务,一个有activity的一个只有service的.并且他们抛出的接口名字相同,正好学习一下同名的引用,发现一个java文件里只能import  1个同同名的类,若想调用另

【黑马Android】(10)绑定的方式调用服务的方法/图片的各种操作/人脸识别

绑定的方式调用服务的方法 服务的生命周期: 一.采用start的方式开启服务 生命周期如下: onStart()过时了 开启服务:onCreate()--> onStartCommand() ---> onDestory(); 如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand(); 服务停止的时候onDestory(). 服务只会被停止一次 二.服务还有一种开启方式,绑定的方式开启服务. onCreate()--->on

通过bindservice方式调用服务方法里面的过程

为什么要引入bindService:目的为了调用服务里面的方法 (1)定义一个服务 服务里面有一个方法需要Activity调用 (2)定义一个中间人对象(IBinder) 继承Binder (3)在onbind方法里面把我们定义的中间人对象返回 (4)在Activity的oncreate 方法里面调用bindservice 目的是为来获取我们定义的中间人对象 (4.1)获取中间人对象 (5)拿到中间人对象后就可以间接的调用到服务里面的方法 public class TestService ext

Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法

1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindService(intent, new MyConn(), BIND_AUTO_CREATE): 参数intent:意图对象,服务对应的意图对象  new  Intent(this,Service.class) 参数ServiceConnection (接口,自定义其接口实现内部类MyConn() ):通讯

Webservice客户端动态调用服务端功能方法

一.发布WebService服务 方式一:在服务端生成wsdl文件,下方客户端直接引用即可 优点:针对要发布的方法生成一个wsdl文件即可,无需多余配置. 缺点:每次服务端方法发生改变都需要重新生成相应的wsdl文件,不适合于功能需要经常变动的方法. 方式二: 二.Client调用服务端接口  1. 项目架构如下: 2.调用过程: 1)右键点击项目名称-->"NEW"-->"Other"-->输入WEB service client 如下 2)完成

从头认识java-12.6 接口与类型信息(怎么绕过接口直接调用类的所有方法)

这一章节我们来讨论一下接口与类型信息. 在之前的章节里面我们提到接口,父类引用子类对象,然后把方法给缩窄了,但是我们这一章节学习到反射,这个约束就变得没有那么严格. 我们来看看下面的例子: package com.ray.ch11; public class Test { public static void main(String[] args) { Person man = new Man(); man.sleep(); man.run(); // man.say();//error } }

idhttp.post方式 调用datasnap rest 远程方法

idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加“update”前缀,不加行不?你试下啦. function TServerMethods1.updateecho(const value: String): String;beginResult := value;end; (2)客户端调用,参数必须是JSON格式的字符串. 客户端POST方式调用时,远程方法名必

使用AIDL调用服务中的方法

AIDL:android interface define language(接口定义语言) 作用:方便远程调用其他服务中的方法 注意:安卓四大组件都要在清单文件注册 aidl创建图: interface InterfaceAidl { void interfacePay(); } public class MyService extends Service { class MyBinder extends InterfaceAidl.Stub { @Override public void i

idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)

idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加"update"前缀,不加行不?你试下啦. function TServerMethods1.updateecho(const value: String): String;beginResult := value;end; (2)客户端调用,参数必须是JSON格式的字符串. 客户端POST方式调用时,远