关于BnServiceManager的一个问题

Lemac 发布于 2012/08/16 16:36
阅读 1K+
收藏 0

@邓凡平 你好,想跟你请教个问题:

BpServiceManager调用addService之后,经过一系列的操作,最终会在BnServiceManager中的onTransact中响应,这里通过响应的指令ADD_SERVICE_TRANSACTION会进行下面的操作

string16 which = data.readString16();

sp<IBinder> b = data.readStrongBinder();

status_t err = addService(which, b);

reply->writeInt32(err);

请问这里的addService在哪实现?

加载中
0
邓凡平
邓凡平
看卷1,样章也有吧
0
Lemac
Lemac

引用来自“邓凡平”的答案

看卷1,样章也有吧
卷1看了。。。没有。。。看了您的卷1我才自己分析到这里的。然后找不到后面的了
邓凡平
邓凡平
回复 @Lemac : 麻烦您再把这一章的整体逻辑思路再回想吧。serviceManager是单独一个进程。6.3节说得很清楚了。小伙,佩服你的钻劲,似乎今天用错地方了 呵呵。加油吧。
Lemac
Lemac
回复 @邓凡平 : 是这样的,您讲的是在waitForResponse中,通过talkWithDriver把addService的指令发送出去,但是发送完成之后,您书里默认通过default分支跳转到了executeCommand,如果走这里的就会走到BnServiceManager。但是我觉得addService这里不一定会走default。
邓凡平
邓凡平
那再认真看看?这个是servicemanager的关键所在,肯定是讲了,而且是单独一节 加油 小伙...就差最后一步了
0
josephluo
josephluo
您好,我也有你这样的疑惑,我的理解是,ServiceManager的服务端根本没有继承BnServiceManager,它由ServiceManger这个executable文件取代了,不知道我说的对不对哈!
0
老牟
老牟

class BnServiceManager : public BnInterface<IServiceManager>
 {
 public:
     virtual status_t    onTransact( uint32_t code,
                                     const Parcel& data,
                                     Parcel* reply,
                                     uint32_t flags = 0);
 };
public interface IServiceManager extends IInterface {
    public void addService(String name, IBinder service) throws RemoteException;
}


0
l
logyfish

在android2.2中有 cmds/runtime/文件夹,里面有继承自BnServiceManager的类BServiceManager,不过这是在模拟器中使用的,其Android.mk文件中有:

ifeq ($(TARGET_SIMULATOR),true)
xxxx

也就是说在真机中BnServiceManager是没有用的.

不过目前在android 4.0中已经没有这段代码了


0
Lemac
Lemac
嗯~后来深入研究了一下,这一块弄的差不多明白啦。。。不过好长时间没看,又忘的差不多啦。。
返回顶部
顶部