• 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();
            }
        }
  • 相关阅读:
    PHP 创建二叉树镜像(交换左右子树)
    PHP 使用二叉树的先序和中序遍历结果构造二叉树
    PHP 不用求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
    PHP 不用加减乘除做加法
    PHP 跳台阶问题
    PHP 输入一个整数,求该整数的二进制表达中有多少个1
    PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
    PHP 查找链表倒数第i个节点
    .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法
    johnsuna 的收藏精品
  • 原文地址:https://www.cnblogs.com/android-deli/p/10081676.html
Copyright © 2020-2023  润新知