HarmonyOs和Android的关联性3:寻找activity 原创
接上篇HarmonyOs和Android的关联性3:鸿蒙hap和安卓apk
https://harmonyos.51cto.com/posts/7583
之前的文章我们是这样猜想的,那么猜想对不对,口说无凭,代码为证。我们知道每一个Ability都会生成对应的ShellActivity,而鸿蒙的ShellMain1Ability对应这HarmonyApplication,而HarmonyApplication就是安卓的Application,而相应的service,provider都有对应的鸿蒙封装,这点是确定无疑的。
今天大概分析下Application和Ability的关联性,AbilityShellActivityDelegate是四大组件的桥梁(鸿蒙好像目前三大组件)ShellActivity中这句把shellactivity传给了AbilityShellActivityDelegate,故事由此展开。
private AbilityShellActivityDelegate delegate = new AbilityShellActivityDelegate(this);
AbilityShellActivityDelegate紧密绑定activity周期,刚初始化时如下代码:
abilityinfo把acitivity的信息保存了下来,
HarmonyLoader.waitForLoadHarmony()这句先不深究,猜想是等待applictions完成初始化。
下边几句主要是在appliciton上添加activity的信息;
注意第一句,这是个单例,这就是说三大或四大组件的bundleinfo都要添加appliction的bundleinfo中去,然后setclassname,注意里边一个replacefirst,很有意思吧,把我们app开发人员见到的ability名字给取了出来,这就是要用于调用流程啊。然后又调用 handleLoadAbility();用于加载ability,代码如下:
这个函数里边先是获取application单例,然后出现了个新成员formability,它里边持有ability,这个是用于添加计数的,有如下方法:
而它在application中就是一个hashmap,如下:
不远扯了 回到handleLoadAbility,后续就是调用 this.ability.setAbilityShell(this.abilityShell);把activity传给了ability,然后init,init中可以是有大活呀,view,windows都出现了: