`

获取Service实例

 
阅读更多

//工具接口

public interface ServiceCreator {

    Service getService();
   

    public static class ServiceBinder<T extends Service> extends Binder {
        private ServiceCreator mServiceCreator;

        public ServiceBinder(ServiceCreator serviceFactory) {
            mServiceCreator = serviceFactory;
        }

        @SuppressWarnings("unchecked")
        public T getService() {
            return (T) mServiceCreator.getService();
        }

        public void setCallBack(ServiceCreator cb) {
            mServiceCreator = cb;

        }

    }

}

//实现接口

public class ServiceServer extends Service implements ServiceCreator {
    private ServiceBinder<ServiceServer> mBinder;
    public int test;

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        mBinder = new ServiceBinder<ServiceServer>(this);
        test = 10;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        test=50;

        //返回binder传给ServiceConnection
        return mBinder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        return super.onUnbind(intent);
    }

    @Override
    public ServiceServer getService() {
        // TODO Auto-generated method stub
        return ServiceServer.this;
    }

}

    //绑定Service

       Intent intent = new Intent();
        intent.setClass(this, ServiceServer.class);
        bindService(intent, conn, Context.BIND_AUTO_CREATE);
 

        //ServiceConnection

        ServiceConnection conn = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub

        }

        @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub

            //从service里的onBinder得到ServiceBinder
            server = ((ServiceCreator.ServiceBinder<ServiceServer>) service)
                    .getService();
            System.out.println("server:"+server.test);

        }
    };

 

核心思想为:

private Binder myBinder  = new Binder (){
   
    public getService(){
       return MyService.this ;
    }
  }
  public onBind(){
     return myBinder ;
  }

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics