Android - 没有调用反射界面

问题描述 投票:0回答:1

这是创建ServiceConnection接口的常规方法。如果我这样做,一切正常。

  ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

但是,如果我使用如下所示的反射定义ServiceConnection接口,那么唯一被调用的方法是hashCode()

ServiceConnection mServiceConnection = (ServiceConnection) java.lang.reflect.Proxy.newProxyInstance(
    ServiceConnection.class.getClassLoader(),
    new java.lang.Class[] { ServiceConnection.class },
    new java.lang.reflect.InvocationHandler() {

        @Override
        public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable {
            log("methodName", method.getName());
            return null;
        }
});

用法是这样的:

applicationContext.bindService(serviceIntent, mServiceConnection, Context.BIND_AUTO_CREATE);

我在这做错了什么?

UPDATE

好吧这很奇怪...我使用调试器和the line bindService()调试器显示mServiceConnection为null,而在上一行我写了log(Boolean.toString(mServiceConnection == null))并且它打印为false(!! ?? !!)。然后我将invoke方法的返回值更改为返回1;

@Override
public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable {
    log("methodName", method.getName());
    return 1;
}

现在它可以工作......同时这个接口的两种方法都是无效的。这里发生了什么?

android reflection interface in-app-billing
1个回答
0
投票

问题是invoke方法返回null。显然在系统方法中,在某些时候调用了hashCode()方法,并且null值是个问题。

ServiceConnection mServiceConnection = (ServiceConnection) java.lang.reflect.Proxy.newProxyInstance(
ServiceConnection.class.getClassLoader(),
new java.lang.Class[] { ServiceConnection.class },
new java.lang.reflect.InvocationHandler() {

    @Override
    public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable {
        log("methodName", method.getName());
        return 1;
    }
});

这样它工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.