1/3
2/3
3/3
再探再报——继续探究鸿蒙框架和Android框架之间的联系
qmr777
编辑于 2023年11月07日 06:33

在看正文之前,请大家先思考一下 什么是平行?假如鸿蒙框架层和Android 框架层是平行关系,调用 鸿蒙框架层 的方法时候,是否应该调用 Android框架层/应用层 的方法?

请带着想法继续往下看

1.“公共事件”和Android中广播的联系?

“公共事件”,也就是CommonEvent...一系列类&方法,这里以发送事件CommonEventManager#publishCommonEvent为例

发送公共事件

实现

转交给CommonEventManagerProxy

随后会把事件交给ICommonEventManager的实现类,继续看CommonEventManagerHelper.getService()是什么

ICommonEventManager的实现类,CommonEventAdapter

CommonEventAdapter#publishCommonEvent

交给CommonEventAdapter#publishCommonEvent这个方法,又把事件转交给了AndroidCommonEventManager这个类,继续看

 

发送事件结束

这个方法相当长,只能截取一小部分,但是应该都能看出来了。CommonEventData被转换成了Android Intent,不管是无序广播、有序广播还是粘性广播,都是调用aospContext(这程序员命名真实诚)里的方法。最终发送“公共事件”会转变成Android中广播

2. DataAbility和Android中ContentProvider的联系?

新建一个DataProvider,打包后会出现一个继承AbilityShellProvider的类,同时AndroidManifest中会注册一个同名的provider

AbilityShellProvider

AbilityShellProvider继承ContentProvider

AbilityShellProvider继承ContentProvider,那么根据java遗传学,它就是一个ContentProvider

3. Ability中能否获取到Application?

说实话,从一个要给我科普“现在操作系统内的几种ipc调用机制和鸿蒙里面ipc的调度”的人的嘴里听到“鸿蒙咋不能和安卓一样以getapplication的方法调用全局”这种问题,我觉得有点 反差萌......

2月7号了,我仍然没有被科普“现在操作系统内的几种ipc调用机制和鸿蒙里面ipc的调度”

宏萌os里有两个Application,先看第一种

HarmonyosApplication

这个方法在AbilityContext类里,但被SystemApi注解保护了。可以通过反射验证方法的存在、返回值以及注解。不知道为什么不公开这个方法

再看第二种

HarmonyApplication

HarmonyApplication,直接继承自Android Application,同样可以反射验证

4. EventHandler和Android Handler的联系?

虽然他们很像,你可以找到EventHandler(对应Handler) EventRunner(对应Looper) EventQueue(对应MsgQueue) 还有熟悉的ThreadLocal,但是它们真的不是一个东西

奇怪的Handler

不过有个奇怪的类HandlerAdapter,还有个PlatformEventRunner类,不知道干什么的

5. 通知和Android Notification之间的联系?

Android 8.0之后通知发生了大改变,新增加了通知渠道(NotificationChannel)。这里我们要一个一个找

(1)NotificationSlot 和 NotificationHelper#addNotificationSlot(NotificationSlot)

开始

中间会调用NotificationAdapter#addNotificationSlot等等一系列方法

结束

getNotificationManager是什么?

很明显了,NotificationSlot会被转换成Android NotificationChannel,通过NotificationManager注册

这里给程序员提个小小的建议,要用NotificationManagerCompat ^_^

(2)NotificationHelper#publishNotification(NotificationRequest request)

最终会调用这个方法

在经过了NotificationManagerProxy#publishNotification ->NotificationAdapter#scheduleNotification一系列方法后,最终会调用AndroidNotificationManager#publishNotification方法,变成了发送Android Notification

感兴趣的可以注册一个NotificationListenerService验证一下

能力有限,难免会有疏忽,欢迎指正


前情提要 网页链接​。上一篇文章主要讲了Activity和PageAbility之间的关系


再次强调,是Impl

再次强调,是Impl。impl是实现(implements)的缩写,建议百度“驼峰命名法”。

善用系统自带的搜索功能

来给大伙解释解释“和安卓一样以getapplication的方法调用全局”里的application是什么意思吧

结合上一条关于application的评论,这几条评论实在是太“精彩”了。。。虽然被河蟹掉了,我还是想把它们展示出来