zoukankan      html  css  js  c++  java
  • Android-bindService本地服务-初步

    在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢?

    答:是因为bindService可以实现Activity-->Service里面的方法并返回数据给Activity,可以理解 在自身APP过程中Service与Activity进行通讯(本地服务)

      bindService还可以实现另外强大的功能,需要结合AIDL,实现跨进程Service与Activity进行通讯(远程服务)

    定义接口扩展,增强版Binder:

    package liudeli.service1.service.inter;
    
    public interface IStudent {
    
        /**
         * 定义通过ID查询姓名
         * @param id 传入ID
         * @return 返回姓名
         */
        public String queryNameByID(int id);
    
    }

    Service具体代码处理:

    package liudeli.service1.service;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.util.Log;
    
    import liudeli.service1.service.inter.IStudent;
    
    public class MyService2 extends Service {
    
        private static final String TAG = MyService2.class.getSimpleName();
    
        @Override
        public IBinder onBind(Intent intent) {
            Log.d(TAG, "我被绑定了");
            return new MyBinder();
        }
    
        class MyBinder extends Binder implements IStudent {
    
            /**
             * 定义通过ID查询姓名
             *
             * @param id 传入ID
             * @return 返回姓名
             */
            @Override
            public String queryNameByID(int id) {
                String result;
                switch (id) {
                    case 1:
                        result = "张三";
                        break;
                    case 2:
                        result = "李四";
                        break;
                    case 3:
                        result = "王五";
                        break;
                    default:
                        result = "赵二";
                        break;
                }
                return result;
            }
        }
    
        @Override
        public boolean onUnbind(Intent intent) {
            Log.d(TAG, "我被解绑了");
            return super.onUnbind(intent);
        }
    }

    MainActivity2调用测试:

      // ---------------------------------- 绑定服务
    
        public void bindService(View view) {
            bindService(new Intent(MainActivity2.this, MyService2.class), connection, Context.BIND_AUTO_CREATE);
        }
    
        public void unBindService(View view) {
            unbindService(connection);
        }
    
        private IStudent iStudent;
    
        /**
         * 服务连接接口
         */
        private ServiceConnection connection = new ServiceConnection() {
    
            /**
             * 已经连接到服务
             * @param name 服务到详细地址等
             * @param service 服务返回过来到结果
             */
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.d("MyService2", "已经连接到服务 name:" + name);
    
                // 返回到接口,需要强制转成具体定义到接口
                iStudent = (IStudent) service;
            }
    
            /**
             * 断开与服务到连接
             * @param name 服务到详细地址等
             */
            @Override
            public void onServiceDisconnected(ComponentName name) {
                Log.d("MyService2", "断开与服务到连接 name:" + name);
                iStudent = null;
            }
        };
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (null != connection) {
                unbindService(connection);
            }
        }
    
        public void test(View view) {
            if (null != iStudent) {
                String result = iStudent.queryNameByID(2);
                Toast.makeText(this, result, Toast.LENGTH_LONG).show();
            }
        }
  • 相关阅读:
    半导体质量管理_Stargate
    半导体质量管理_eCAP LineWorks SPACE eCAP(电子OCAP)
    半导体质量管理_SQM 供应商质量管理
    半导体质量管理(LineWorks)_SPACE(统计过程分析和控制环境)
    计算机架构(层的由来)
    三层网络结构(客户端,应用服务层,数据源层)
    Navigator对象
    为什么大型互联网都需要网关服务?
    igate(因特网网关)
    [分享] SDK 2018.3烧写没有DDR的单板的Flash
  • 原文地址:https://www.cnblogs.com/android-deli/p/10081676.html
Copyright © 2011-2022 走看看