zoukankan      html  css  js  c++  java
  • 通过接口方式调用服务里面的方法

      接口可以隐藏代码内部的细节 让程序员暴露自己只想暴露的方法
      (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(){
                洗桑拿();
            }
            
            
        }
        
        
    }
  • 相关阅读:
    Web开发用到的导航栏固定顶端,页脚固定低端
    Action Filter 与 内置的Filter实现(实例-防盗链)转
    MVC 通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录异常等
    HTML5中custom data-*特性与asp.net mvc 3 表单验证
    jQuery验证控件jquery.validate.js使用说明+中文API (转)
    Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案 (转)
    Android定制控件-带图像的TextView
    使用Elmah记录日志
    laravel路由与控制器(资源路由restful)
    npm 常用命令
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5987866.html
Copyright © 2011-2022 走看看