在android中启动sensor的代码是:SensorService::instantiate();
在instantiate()中的代码如下:
 sp<IServiceManager> sm(defaultServiceManager());
        return sm->addService(String16(SERVICE::getServiceName()), new SensorService());addService()函数的定义是:status_t    addService( const String16& name,const sp<IBinder>& service)= 0;
请问:new SensorService()返回的指针问什么能传递给sp<IBinder>& service?另外,在调用addService的时候是怎么调用到SensorService::onFirstRef()这个函数的?谢谢!

解决方案 »

  1.   

                  IBinder
                     |
    ISensorServer BBinder
              \      /
             BnSensorServer
                  |
              SensorService
    new SensorService()返回的指针问什么能传递给sp<IBinder>& service ?
    因为它是从IBinder继承下来的,见上图继承大概关系怎么调用到SensorService::onFirstRef()这个函数的?
    因为你给sp<IBinder>& 赋值时,sp是个模块,它里面可以实现onFirstRef()
    调用
      

  2.   

    继承关系图错位了
    sp是一个模板类,它里面实现了onFirstRef()具体过程看一下sp的模板实现过程即可,很容易的
      

  3.   

    sp模板是指的这个么:frameworks/base/include/utils/StrongPointer.h?
    里面没有关于onFirstRef()的实现啊