我试图找到 remote() 的实现,如:
remote()->transact(CODE, data, &reply);
你们知道它在哪里吗?搜索谷歌结果是徒劳的。或者,如果您知道该功能的作用,那对我将有很大帮助。非常感谢
更新:似乎 remote() 将返回一个指向 BBinder、IBinder、BpBinder 或 IPCThreadState 类型对象的指针,但我不确定是哪一个。
我试图找到 remote() 的实现,如:
remote()->transact(CODE, data, &reply);
你们知道它在哪里吗?搜索谷歌结果是徒劳的。或者,如果您知道该功能的作用,那对我将有很大帮助。非常感谢
更新:似乎 remote() 将返回一个指向 BBinder、IBinder、BpBinder 或 IPCThreadState 类型对象的指针,但我不确定是哪一个。
的实现remote
很简单:
class BpRefBase : public virtual RefBase
{
protected:
BpRefBase(const sp<IBinder>& o);
virtual ~BpRefBase();
virtual void onFirstRef();
virtual void onLastStrongRef(const void* id);
virtual bool onIncStrongAttempted(uint32_t flags, const void* id);
inline IBinder* remote() { return mRemote; }
inline IBinder* remote() const { return mRemote; }
private:
BpRefBase(const BpRefBase& o);
BpRefBase& operator=(const BpRefBase& o);
IBinder* const mRemote;
RefBase::weakref_type* mRefs;
volatile int32_t mState;
};
将ServiceManager
管理所有已注册的服务,对于它的工作方式,请检查现有答案。当你getService
fromServiceManager
时,它会返回一个IBinder
代表那个服务的对象,然后这个IBinder
对象会被放入一个BpInterface
. 那是你的遥控器。然后,您可以使用它BpInterface
来与实际的service(BnInterface)
.
template<typename INTERFACE>
class BpInterface : public INTERFACE, public BpRefBase
{
public:
BpInterface(const sp<IBinder>& remote);
protected:
virtual IBinder* onAsBinder();
};
BpXXX
一切似曾相识BpCamera
,BpCameraService
自始至终BpInterface
。