interface宏:DECLARE_META_INTERFACE/IMPLEMENT_META_INTERFACE


frameworks/native/include/binder/IInterface.h:

#define DECLARE_META_INTERFACE(INTERFACE)                               \
    static const android::String16 descriptor;                          \
    static android::sp<I##INTERFACE> asInterface(                       \
            const android::sp<android::IBinder>& obj);                  \
    virtual const android::String16& getInterfaceDescriptor() const;    \
    I##INTERFACE();                                                     \
    virtual ~I##INTERFACE();                                            \


#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME)                       \
    const android::String16 I##INTERFACE::descriptor(NAME);             \
    const android::String16&                                            \
            I##INTERFACE::getInterfaceDescriptor() const {              \
        return I##INTERFACE::descriptor;                                \
    }                                                                   \
    android::sp<I##INTERFACE> I##INTERFACE::asInterface(                \
            const android::sp<android::IBinder>& obj)                   \
    {                                                                   \
        android::sp<I##INTERFACE> intr;                                 \
        if (obj != NULL) {                                              \
            intr = static_cast<I##INTERFACE*>(                          \
                obj->queryLocalInterface(                               \
                        I##INTERFACE::descriptor).get());               \
            if (intr == NULL) {                                         \
                intr = new Bp##INTERFACE(obj);                          \
            }                                                           \
        }                                                               \
        return intr;                                                    \
    }                                                                   \
    I##INTERFACE::I##INTERFACE() { }                                    \
    I##INTERFACE::~I##INTERFACE() { }                                   \

在framework/native/include/binder/IServiceManager.h中:

class IServiceManager : public IInterface
{
public:
    DECLARE_META_INTERFACE(ServiceManager);

展开它:

#define DECLARE_META_INTERFACE(ServiceManager)                               \
    static const android::String16 descriptor;                          \
    static android::sp<IServiceManager> asInterface(                       \
            const android::sp<android::IBinder>& obj);                  \
    virtual const android::String16& getInterfaceDescriptor() const;    \
    IServiceManager();                                                     \
    virtual ~IServiceManager();                                            \                                   

在framework/native/libs/binder/IServiceManager.cpp中

IMPLEMENT_META_INTERFACE(ServiceManager, "android.os.IServiceManager");

展开它:

#define IMPLEMENT_META_INTERFACE(ServiceManager, "android.os.IServiceManager")                       \
    const android::String16 IServiceManager::descriptor("android.os.IServiceManager");             \
    const android::String16&                                            \
            IServiceManager::getInterfaceDescriptor() const {              \
        return IServiceManager::descriptor;                                \
    }                                                                   \
    android::sp<IServiceManager> IServiceManager::asInterface(                \
            const android::sp<android::IBinder>& obj)                   \
    {                                                                   \
        android::sp<IServiceManager> intr;                                 \
        if (obj != NULL) {                                              \
            intr = static_cast<IServiceManager*>(                          \
                obj->queryLocalInterface(                               \
                        IServiceManager::descriptor).get());               \
            if (intr == NULL) {                                         \
                intr = new BpServiceManager(obj);                          \
            }                                                           \
        }                                                               \
        return intr;                                                    \
    }                                                                   \
    IServiceManager::IServiceManager() { }                                    \
    IServiceManager::~IServiceManager() { }                                   \


Native层的Binder架构,通过如下两个宏,非常方便地创建了new Bp##INTERFACE(obj):

#define DECLARE_META_INTERFACE(INTERFACE)   
#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME)     

Android6.0里面定义了不少:

---- DECLARE_META_INTERFACE Matches (84 in 79 files) ----
GpuService.h (frameworks\native\services\surfaceflinger):    DECLARE_META_INTERFACE(GpuService);
IAppOpsCallback.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(AppOpsCallback);
IAppOpsService.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(AppOpsService);
IAudioFlinger.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(AudioFlinger);
IAudioFlingerClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(AudioFlingerClient);
IAudioPolicyService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(AudioPolicyService);
IAudioPolicyServiceClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(AudioPolicyServiceClient);
IAudioRecord.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(AudioRecord);
IAudioTrack.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(AudioTrack);
IBatteryPropertiesListener.h (frameworks\native\include\batteryservice):    DECLARE_META_INTERFACE(BatteryPropertiesListener);
IBatteryPropertiesRegistrar.h (frameworks\native\include\batteryservice):    DECLARE_META_INTERFACE(BatteryPropertiesRegistrar);
IBatteryStats.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(BatteryStats);
ICamera.h (frameworks\av\include\camera\android\hardware):    DECLARE_META_INTERFACE(Camera);
ICameraClient.h (frameworks\av\include\camera\android\hardware):    DECLARE_META_INTERFACE(CameraClient);
ICameraRecordingProxy.h (frameworks\av\include\camera):    DECLARE_META_INTERFACE(CameraRecordingProxy);
ICameraRecordingProxyListener.h (frameworks\av\include\camera):    DECLARE_META_INTERFACE(CameraRecordingProxyListener);
ICameraServiceProxy.h (frameworks\av\include\camera):    DECLARE_META_INTERFACE(CameraServiceProxy);
ICommonClock.h (frameworks\av\include\common_time):    DECLARE_META_INTERFACE(CommonClockListener);
ICommonClock.h (frameworks\av\include\common_time):    DECLARE_META_INTERFACE(CommonClock);
ICommonTimeConfig.h (frameworks\av\include\common_time):    DECLARE_META_INTERFACE(CommonTimeConfig);
IConsumerListener.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(ConsumerListener);
ICrypto.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(Crypto);
IDataSource.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(DataSource);
IDisplayEventConnection.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(DisplayEventConnection);
IDrm.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(Drm);
IDrmClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(DrmClient);
IDrmManagerService.h (frameworks\av\drm\libdrmframework\include):    DECLARE_META_INTERFACE(DrmManagerService);
IDrmServiceListener.h (frameworks\av\drm\libdrmframework\include):    DECLARE_META_INTERFACE(DrmServiceListener);
IEffect.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(Effect);
IEffectClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(EffectClient);
IGraphicBufferAlloc.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(GraphicBufferAlloc);
IGraphicBufferConsumer.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(GraphicBufferConsumer);
IGraphicBufferProducer.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(GraphicBufferProducer);
IHDCP.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(HDCPObserver);
IHDCP.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(HDCP);
IInputFlinger.h (frameworks\native\include\input):    DECLARE_META_INTERFACE(InputFlinger);
IInterface.h (frameworks\native\include\binder):#define DECLARE_META_INTERFACE(INTERFACE)                               \
IMediaCodecList.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaCodecList);
IMediaCodecService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaCodecService);
IMediaDrmService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaDrmService);
IMediaExtractor.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaExtractor);
IMediaExtractorService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaExtractorService);
IMediaHTTPConnection.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaHTTPConnection);
IMediaHTTPService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaHTTPService);
IMediaLogService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaLogService);
IMediaMetadataRetriever.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaMetadataRetriever);
IMediaPlayer.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaPlayer);
IMediaPlayerClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaPlayerClient);
IMediaPlayerService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaPlayerService);
IMediaRecorder.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaRecorder);
IMediaRecorderClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaRecorderClient);
IMediaResourceMonitor.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(MediaResourceMonitor);
IMediaSource.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(MediaSource);
IMemory.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(MemoryHeap);
IMemory.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(Memory);
IMountService.h (frameworks\base\include\storage):    DECLARE_META_INTERFACE(MountService);
IMountServiceListener.h (frameworks\base\include\storage):    DECLARE_META_INTERFACE(MountServiceListener);
IMountShutdownObserver.h (frameworks\base\include\storage):    DECLARE_META_INTERFACE(MountShutdownObserver);
IObbActionListener.h (frameworks\base\include\storage):    DECLARE_META_INTERFACE(ObbActionListener);
IOMX.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(OMX);
IOMX.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(OMXObserver);
IPermissionController.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(PermissionController);
IPowerManager.h (frameworks\native\include\powermanager):    DECLARE_META_INTERFACE(PowerManager);
IProcessInfoService.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(ProcessInfoService);
IProducerListener.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(ProducerListener)
IRadio.h (frameworks\av\include\radio):    DECLARE_META_INTERFACE(Radio);
IRadioClient.h (frameworks\av\include\radio):    DECLARE_META_INTERFACE(RadioClient);
IRadioService.h (frameworks\av\include\radio):    DECLARE_META_INTERFACE(RadioService);
IRemoteDisplay.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(RemoteDisplay);
IRemoteDisplayClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(RemoteDisplayClient);
IResourceManagerClient.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(ResourceManagerClient);
IResourceManagerService.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(ResourceManagerService);
IResultReceiver.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(ResultReceiver);
ISchedulingPolicyService.h (frameworks\av\media\utils):    DECLARE_META_INTERFACE(SchedulingPolicyService);
ISensorEventConnection.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(SensorEventConnection);
ISensorServer.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(SensorServer);
IServiceManager.h (frameworks\native\include\binder):    DECLARE_META_INTERFACE(ServiceManager);
ISoundTrigger.h (frameworks\av\include\soundtrigger):    DECLARE_META_INTERFACE(SoundTrigger);
ISoundTriggerClient.h (frameworks\av\include\soundtrigger):    DECLARE_META_INTERFACE(SoundTriggerClient);
ISoundTriggerHwService.h (frameworks\av\include\soundtrigger):    DECLARE_META_INTERFACE(SoundTriggerHwService);
IStreamSource.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(StreamSource);
IStreamSource.h (frameworks\av\include\media):    DECLARE_META_INTERFACE(StreamListener);
ISurfaceComposer.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(SurfaceComposer);
ISurfaceComposerClient.h (frameworks\native\include\gui):    DECLARE_META_INTERFACE(SurfaceComposerClient);


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值