【问题标题】:Implementing interface ServiceConnection实现接口ServiceConnection
【发布时间】:2017-07-02 14:14:55
【问题描述】:

步骤#1。需要实现接口ServiceConnection

public class ServiceBinding<T extends ParentService<T>> implements ServiceConnection {
    public T bindedService;

    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        // Warning: Type safety: Unchecked cast from IBinder to ChatService<T>.LocalBinder
        bindedService = ((T.LocalBinder) service).getService();
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
    }
}

Step #2. 那么Parent-service将如下:

public abstract class ParentService<T extends ParentService<T>> extends Service {
    public class LocalBinder extends Binder {
        public T getService() {
            return (T) T.this; // Warning: Unchecked cast from ChatService<T> to T
        }
    };
}

问题:这样的解决方案可以接受吗?

ServiceConnection应该如何正确实现?

【问题讨论】:

    标签: java android generics interface abstract-class


    【解决方案1】:

    你可以这样实现-

    private ServiceConnection mConnection = new ServiceConnection() {
    
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            LocalBinder binder = (LocalBinder) service;
            service = binder.getService();
            boundVal = true;
        }
    
        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            boundVal = false;
        }
    };
    

    boundVal 是“unbindservice”的触发器。以connection为参数传递boundval。

    onServiceConnected()onServiceDisconnected() 分别在客户端-服务器连接建立或断开后被调用。对于onServiceConnected() 方法,这将传递一个IBinder 对象,其中包含客户端与服务交互所需的信息。 干杯!

    【讨论】:

    • 如何对绑定进行通用实现以避免代码重复的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 2016-06-20
    • 2012-07-23
    • 2013-09-25
    • 2011-08-28
    • 2014-08-21
    • 2015-11-08
    相关资源
    最近更新 更多