zoukankan      html  css  js  c++  java
  • Android-bindService本地服务-初步-Service返回对象

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

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

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

    定义接口来增强服务返回到Binder:

    package liudeli.service1.service.inter;
    
    import liudeli.service1.service.domain.Person;
    
    public interface IPerson {
    
        /**
         * 通过ID查询Person对象
         * @param id
         */
        public Person queryPersonByID(int id);
    
    }

    服务处理onBind方法:

    package liudeli.service1.service;
    
    import android.app.Service;
    
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    
    import liudeli.service1.service.domain.Person;
    import liudeli.service1.service.inter.IPerson;
    
    public class MyService3 extends Service {
    
        @Override
        public IBinder onBind(Intent intent) {
            return new MyBinder();
        }
    
        class MyBinder extends Binder implements IPerson {
    
            /**
             * 通过ID查询Person对象
             *
             * @param id
             */
            @Override
            public Person queryPersonByID(int id) {
                Person person = null;
                switch (id) {
                    case 1:
                        person = new Person(1, "张三", 30);
                        break;
                    case 2:
                        person = new Person(2, "李四", 20);
                        break;
                    case 3:
                        person = new Person(3, "赵六", 26);
                        break;
                    default:
                        person = new Person(9,"王五", 40);
                        break;
                }
                return person;
            }
        }
    }

    MainActivity3调用服务到方法:

    package liudeli.service1;
    
    import android.app.Activity;
    
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.util.Log;
    import android.view.View;
    
    import liudeli.service1.service.MyService3;
    import liudeli.service1.service.inter.IPerson;
    
    public class MainActivity3 extends Activity {
    
        private final static String TAG = MainActivity3.class.getSimpleName();
    
        private MyServiceConnection connection = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main3);
    
            connection = new MyServiceConnection();
        }
    
        public void bindService(View view) {
            bindService(new Intent(this, MyService3.class), connection, BIND_AUTO_CREATE);
        }
    
        public void unBindService(View view) {
            unbindService(connection);
        }
    
        private IPerson person = null;
    
        /**
         * 服务连接接口具体实现对象
         */
        class MyServiceConnection implements ServiceConnection {
    
            /**
             * 与服务进行连接
             * @param name
             * @param service
             */
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.d("MyService3", "与服务进行连接 name:" + name);
    
                person = (IPerson) service;
            }
    
            /**
             * 与服务断开连接
             * @param name
             */
            @Override
            public void onServiceDisconnected(ComponentName name) {
                person = null;
                System.gc();
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (null != connection) {
                unbindService(connection);
            }
        }
    
        public void testMothod(View view) {
            if (null != person) {
                liudeli.service1.service.domain.Person p = person.queryPersonByID(1);
                Log.d("MyService3", "p.toString" + p.toString());
            }
        }
    }
  • 相关阅读:
    连续竞价
    使用 Sonar 进行代码质量管理
    【转】jQuery.ajax向后台传递数组问题
    DevOps
    【转】赚钱的思维
    【转】如果有人让你推荐编程技术书,请叫他看这个列表
    Java学习记录-Jdk包简单介绍
    有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a
    有两个数a,b,请写一个函数交换a,b
    开辟一个二维数组,有10*8个元素,用随机数填充,按照下面的方法用函数实现查找一个数是否存在
  • 原文地址:https://www.cnblogs.com/android-deli/p/10082002.html
Copyright © 2011-2022 走看看