zoukankan      html  css  js  c++  java
  • Android AIDL Service

    AIDL Service //跨进程调用Service
        一个APK想调用另一个APK中的Service 如何实现
    AIDL //定义两个进程之间的通信接口

    Demo1 传递简单数据

    AidlService

    public class AidlService extends Service {
    
        private CatBinder catBinder;
        Timer timer = new Timer();
        String[] colors = new String[] { "红色", "黄色", "黑色" };
        double[] weights = new double[] { 2.3, 3.1, 1.58 };
        private String color;
        private double weight;
    
        // 继承Stub,也就是实现额ICat接口,并实现了IBinder接口
        public class CatBinder extends Stub {
            @Override
            public String getColor() throws RemoteException {
                return color;
            }
    
            @Override
            public double getWeight() throws RemoteException {
                return weight;
            }
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            catBinder = new CatBinder();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    // 随机地改变Service组件内color、weight属性的值。
                    int rand = (int) (Math.random() * 3);
                    color = colors[rand];
                    weight = weights[rand];
                    System.out.println("--------" + rand);
                }
            }, 0, 800);
        }
    
        @Override
        public IBinder onBind(Intent arg0) {
            /*
             * 返回catBinder对象 在绑定本地Service的情况下,该catBinder对象会直接
             * 传给客户端的ServiceConnection对象 的onServiceConnected方法的第二个参数;
             * 在绑定远程Service的情况下,只将catBinder对象的代理 传给客户端的ServiceConnection对象
             * 的onServiceConnected方法的第二个参数;
             */
            return catBinder; 
        }
    
        @Override
        public void onDestroy() {
            timer.cancel();
        }
    
    }
    package com.example.aidlservice;
    
    interface ICat
    {
        String getColor();
        double getWeight();
    }

    AidlClient

    public class MainActivity extends Activity {
    
        private ICat catService;
        private Button get;
        EditText color, weight;
        
        private ServiceConnection conn = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // 获取远程Service的onBind方法返回的对象的代理
                catService = ICat.Stub.asInterface(service);
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                catService = null;
            }
        };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            get = (Button) findViewById(R.id.get);
            color = (EditText) findViewById(R.id.color);
            weight = (EditText) findViewById(R.id.weight);
            // 创建所需绑定的Service的Intent
            Intent intent = new Intent();
            intent.setAction("com.example.aidlservice.AIDL_SERVICE");
            // 绑定远程Service
            bindService(intent, conn, Service.BIND_AUTO_CREATE);
            
            
            get.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    try {
                        // 获取、并显示远程Service的状态
                        color.setText(catService.getColor());
                        weight.setText(catService.getWeight() + "");
                    } catch (RemoteException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            // 解除绑定
            this.unbindService(conn);
        }
    
    }
    package com.example.aidlservice;
    
    interface ICat
    {
        String getColor();
        double getWeight();
    }
  • 相关阅读:
    P1017 进制转换
    P1100 高低位交换
    P1469 找筷子
    P1866 编号
    SQL常用语句(T-SQL、PL/SQL)
    Proxyer内网穿透配置教程
    使用JS检测自定义协议是否存在
    C# 代码启动ClickOnce应用
    SQL Server 异地备份到远程共享文件夹异常处理
    发布ClickOnce应用程序步骤与URL传参应用
  • 原文地址:https://www.cnblogs.com/huanyi0723/p/4997983.html
Copyright © 2011-2022 走看看