由华为出品、我国完全自主知识产权的HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统 。现已于2020年9月10日开源,并面向应用开发者发布Beta版本。预计明年鸿蒙将取代Android,全面支持华为手机。
Android程序员转型HarmonyOS程序员的已经提上了日程,学习HarmonyOS的开发是每个Android程序员的头等大事。就像每个Android程序员都是从Activity的生命周期开始学习Android开发的,我们转型Harmony开发也要从Page Ability的生命周期入手。本文我将用Android的Activity生命周期解释HarmonyOS的Page Ability生命周期。
如官方图所示,Page Ability的生命周期分初始状态(INITIAL)、前台状态(ACTIVE)、可见状态(INACTIVE)和后台状态(BACKGROUND),与Android的Activity的生命周期状态大同小异(把不可见状态分为了“刚创建”和“快结束”两种),触发这些状态的回调方法也可以理解为Activity的某些方法:
(1)onStart():
当系统首次创建Page Ability实例时,会触发onStart()方法。就像onCreate()方法在一个Activity实例的生命周期过程中只调用一次一样,对于一个Page Ability实例,onStart()方法在其生命周期过程中也能且仅能触发一次,Page Ability在此方法执行后进入可见状态(INACTIVE)。
本方法可以理解为Activity的onCreate() + onStart()方法,但有所不同的是Page Ability的onStart()方法必须重写,因为需要在此方法内配置默认展示的AbilitySlice(可以理解为Android的Fragment,不在本文讨论范围内)
(2)onActive():
Page Ability会在进入前台状态(ACTIVE)后系统调用onActive()方法。Page Ability会一直保持ACTIVE状态,直到Page Ability失去焦点。
本方法可以理解为Activity的onResume()方法。
(3)onInactive():
当Page Ability失去焦点(对用户不可操作,可能可见,也可能不可见)时,会调用此方法,然后Page Ability进入INACTIVE状态。常见的场景有从屏幕顶部拉出Notification或者被非全屏的Page Ability不完全遮挡等。
本方法可以理解为Activity的onPause()方法。就像Activity的onResume()与onPause()方法经常成对出现一样,Page Ability的onActive()也与onInactive()方法成对出现,并在onActive()中获取在onInactive()中被释放的资源。
至于onInactive()是否像onPause()方法与AMS进行Binder通信启动新Activity一样为了启动新Page Ability做了点什么事,以及onActive()是否像onResume()方法执行完毕就意味着ViewRootImpl创建一样为了绘制UI做了点什么事,属于HarmonyOS进阶知识,不在本文讨论范围内。
(4)onBackground():
如果Page不再对用户可见,系统将调用此回调通知开发者用户进行相应的资源释放,此后Page进入BACKGROUND状态。开发者应该在此回调中释放Page不可见时无用的资源,或在此回调中执行较为耗时的状态保存操作。
本方法可以理解为Activity的onStop()方法
(5)onForeground():
处于BACKGROUND状态的Page仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此Page),系统将先调用onForeground()回调通知开发者,而后Page的生命周期状态回到INACTIVE状态。开发者应当在此回调中重新申请在onBackground()中释放的资源,最后Page的生命周期状态进一步回到ACTIVE状态,系统将通过onActive()回调通知开发者用户。
本方法可以理解为Activity的onRestart() + onStart()方法。
(6)onStop():
系统将要销毁Page时,将会触发此回调函数,通知用户进行系统资源的释放。销毁Page的可能原因包括以下几个方面:
本方法可以理解为Activity的onDestory()方法。
通过本文,我们了解了HarmonyOS的Page Ability的生命周期,为转型HarmonyOS程序员打下了坚实基础。