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);

441

被折叠的 条评论
为什么被折叠?



