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


      接口可以隐藏代码内部的细节 让程序员暴露自己只想暴露的方法
      (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(){
                洗桑拿();
            }
            
            
        }
        
        
    }
  • 相关阅读:
    java常用类-----String类的源码分析、可变和不可变序列
    java常用类-----包装类及自动装箱和拆箱
    java数组---------二分查找_折半检索
    java数组------冒泡排序和优化
    java数组--------多维数组及数组存储表格数据
    java数组------Arrays工具类使用
    Volley超时重试机制
    Volley框架原理
    模块化实现(好处,原因)
    Android系统显示原理
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5987866.html
Copyright © 2020-2023  润新知