HarmonyOs DevEco Studio小技巧28--部分鸿蒙生命周期详解
目录
前言
页面和自定义组件生命周期
页面生命周期
onPageShow --- 表示页面已经显示
onPageHide --- 表示页面已经隐藏
onBackPress --- 表示用户点击了返回键
组件生命周期
aboutToAppear --- 表示组件即将出现
onDidBuild --- 表示组件已经构建完成
aboutToDisappear --- 表示组件即将消失
aboutToReuse --- 表示组件即将被重用
aboutToRecycle --- 表示组件即将被回收
onWillApplyTheme --- 表示组件即将应用主题
UIAbility组件的生命周期
onCreate --- 会在组件创建时被调用
onDestroy --- 会在组件销毁时被调用
onWindowStageCreate --- 会在窗口阶段创建时被调用
onWindowStageWillDestroy --- 函数会在窗口阶段即将被销毁时被调用
onWindowStageDestroy--- 会在窗口阶段销毁时被调用
onWindowStageRestore --- 是在窗口恢复时调用
onForeground --- 会在组件进入前台时被调用
onBackground --- 会在组件进入后台时被调用
onContinue --- 是在应用继续运行时调用
onNewWant --- 会在组件接收到新的请求时被调用
onDump --- 是在应用被 dump 时调用
onSaveState --- 是在应用保存状态时调用
onPrepareToTerminate --- 是在应用准备终止时调用
onBackPressed --- 是在用户按下返回键时调用。
onWillAppear --- 会在组件即将出现时被调用
onAppear --- 会在组件出现时被调用
onWillShow --- 会在组件即将显示时被调用
onShown --- 会在组件显示时被调用
onWillHidede --- 会在组件即将隐藏时被调用
onHidden --- 会在组件隐藏时被调用
onWillDisappear --- 会在组件即将消失时被调用
onDisappear --- 会在组件消失时被调用
onBackPressed --- 会在用户按下返回键时被调用
前言
生命周期是什么?
个人理解:生命周期就是一个由新生到死亡的过程。
以人来举例子:
诞生前
人从受精卵开始,在妈妈肚子里经历胚胎和胎儿阶段,这是生命的起始孕育。
婴儿幼儿期
弱小需照顾,靠吃睡成长。学走路、说话,爱探索。
童年期青春期
上学学知识,社交渐广身体和心理有大变化。
成年期
承担工作、家庭等责任,创造价值。
老年期
身体机能衰退,但也能积极生活。
死亡
最后死亡,结束一生的生命周期。
在鸿蒙开发中,生命周期主要是指鸿蒙应用内各类组件从创建到销毁所经历的一系列阶段及在各阶段相应的处理机制。
例如:当我们创建一个对象时,就会调用它的构造函数,这个函数就是对象的“出生”时刻。在对象的生命周期中,我们可以通过调用它的方法来改变它的状态,也可以通过调用它的析构函数来释放它占用的资源,这个函数就是对象的“死亡”时刻。
生命周期的主要作用包括:
-
资源管理:在合适的阶段分配和释放资源,比如在组件创建时初始化所需资源,在组件销毁时释放不再使用的资源,避免内存泄漏和提高性能。
-
数据处理:在特定阶段加载或更新数据。例如,在组件显示时获取最新数据,在组件隐藏时暂停数据更新操作。
-
状态维护:根据组件的不同状态进行相应的处理,以保证组件的行为和显示符合用户的预期。
页面和自定义组件生命周期
-
自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。
-
页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。
页面生命周期
onPageShow --- 表示页面已经显示
- 含义:onPageShow 这个函数的作用是用于指示页面已经成功显示出来了。每当页面经历显示操作时,该函数就会被触发一次。这里所说的显示场景比较广泛,比如在应用内进行页面之间的路由切换,当切换到目标页面且该页面完整显示时,onPageShow 会被触发;另外,当整个应用从后台状态重新进入前台,使得相关页面再次呈现给用户时,此函数同样会被触发。需要注意的是,它的生效范围是仅限于被 @Entry 装饰的自定义组件,也就是说只有这类特定的组件所在的页面在显示相关情况发生时,才会执行 onPageShow 函数内的逻辑。
- 示例场景:假设在一个手机购物应用中,用户从商品列表页通过点击某个商品进入商品详情页,当商品详情页完整显示出来后,若商品详情页的组件是被 @Entry 装饰的自定义组件,那么 onPageShow 就会被触发。此时可以在这个函数里进行一些操作,比如更新页面上某些元素的显示状态(如将某个加载动画隐藏,显示实际的商品图片等),或者发送一个统计事件告知服务器该商品详情页已成功展示给用户等。
onPageHide --- 表示页面已经隐藏
- 含义:onPageHide 函数则是用于表明页面已经进入隐藏状态了。与 onPageShow 相对应,每当页面发生隐藏操作时,该函数就会被触发一次。其隐藏场景同样涵盖多种情况,例如在应用内进行页面路由切换,当从当前页面切换到其他页面,导致当前页面隐藏时,onPageHide 会被触发;当整个应用从前台进入后台,使得相关页面不再可见时,此函数也会被触发。同样要注意的是,它也仅对被 @Entry 装饰的自定义组件生效,即只有这类组件所在的页面隐藏时,才会执行 onPageHide 函数内的逻辑。
- 示例场景:继续以手机购物应用为例,当用户在商品详情页点击 “返回” 按钮回到商品列表页时,商品详情页就会隐藏。若商品详情页的组件是被 @Entry 装饰的自定义组件,那么 onPageHide 就会被触发。在这个函数里,可以进行一些清理操作,比如暂停一些与该页面相关的定时器(如果有的话),或者释放一些该页面占用的临时资源等,因为页面暂时不需要展示了。
onBackPress --- 表示用户点击了返回键
- 含义:onBackPress 函数主要是在用户点击了返回按钮的情况下被触发。它仅针对被 @Entry 装饰的自定义组件生效。当这个函数被触发后,根据它的返回值来决定后续的页面处理逻辑。如果返回值为 true,这意味着页面自身会处理返回逻辑,此时不会进行常规的页面路由操作;而如果返回值为 false,那么就会采用默认的路由返回逻辑来处理页面的返回情况。并且需要注意的是,如果在函数中不设置返回值,那么系统会按照 false 来进行处理。
- 示例场景:在一个新闻阅读应用中,用户在阅读一篇新闻文章时,页面是由被 @Entry 装饰的自定义组件构成的。当用户点击手机上的返回按钮时,onBackPress 就会被触发。如果开发者希望在用户点击返回按钮时,弹出一个提示框询问用户是否真的要离开当前文章页面(即页面自己处理返回逻辑),那么在 onBackPress 函数中可以设置返回值为 true,然后在函数内部实现弹出提示框等相关操作。如果开发者不想做特殊处理,只想让页面按照默认的路由返回逻辑返回(比如直接回到上一个浏览过的页面),那么可以让 onBackPress 函数返回 false,或者干脆不设置返回值,系统就会按照默认的方式处理返回情况。
组件生命周期
aboutToAppear --- 表示组件即将出现
- 含义:aboutToAppear 函数用于指示组件即将出现在界面上。它的执行时机是在创建自定义组件的新实例之后,但在执行该组件的 build () 函数之前。这个阶段允许在函数内对状态变量进行修改,而且所做的更改会在后续执行 build () 函数时生效,从而影响组件最终呈现的样子。对于实现自定义布局的自定义组件,其 aboutToAppear 生命周期会在布局过程中被触发,进一步参与到组件布局相关的准备工作中。
- 示例场景:假设正在开发一个音乐播放应用,有一个自定义的播放列表组件。当用户切换到包含该播放列表组件的页面时,在创建这个播放列表组件的新实例后,aboutToAppear 函数就会被触发。此时,如果想要根据用户之前的播放偏好(比如上次播放的音乐类型)来预先设置一些状态变量,就可以在 aboutToAppear 函数中进行操作。比如设置一个状态变量来决定是否默认展开某个特定音乐类型的播放列表分组,这些设置会在后续执行 build () 函数构建组件时生效,使得播放列表组件以符合用户偏好的状态呈现出来。
onDidBuild --- 表示组件已经构建完成
- 含义:onDidBuild 函数表明组件已经完成构建。它的执行时机是在执行完自定义组件的 build () 函数之后。需要注意的是,不建议在这个函数中更改状态变量或者使用如 animateTo 等功能,因为这样做可能会导致不稳定的 UI 表现,比如出现界面闪烁、组件布局错乱等问题。
- 示例场景:继续以音乐播放应用中的播放列表组件为例,当 build () 函数完成对播放列表组件的构建,将所有的列表项、标题、播放按钮等元素都组装好之后,onDidBuild 函数就会被执行。此时,应该避免在这个函数里进行诸如突然改变某个列表项的显示状态(通过更改状态变量)或者触发一个动画效果(使用 animateTo)等操作,以免破坏已经构建好的稳定的组件呈现效果。
aboutToDisappear --- 表示组件即将消失
- 含义:aboutToDisappear 函数用于表示组件即将消失,其执行时机是在自定义组件析构销毁时。在这个函数中,不允许改变状态变量,尤其是对 @Link 变量的修改更是要严格禁止,因为这样的修改可能会导致整个应用程序的行为变得不稳定,比如出现数据不一致、界面异常等情况。
- 示例场景:在上述音乐播放应用中,如果用户从包含播放列表组件的页面切换到其他页面,导致播放列表组件不再需要展示并即将被析构销毁时,aboutToDisappear 函数就会被执行。此时,即使发现有一些数据似乎需要更新(比如播放列表的更新计数),也不能在这个函数里去改变相关的状态变量,要保证组件能够平稳地退出界面而不引发后续的问题。
aboutToReuse --- 表示组件即将被重用
- 含义:aboutToReuse 函数表示组件即将被重用。当一个可复用的自定义组件从复用缓存中重新加入到节点树时,就会触发这个生命周期回调,并且会将组件的构造参数传递给 aboutToReuse 函数。这使得组件在被重用时能够根据传递过来的构造参数进行相应的调整和初始化,以适应新的使用场景。
- 示例场景:假设在一个电商应用中,有一个自定义的商品卡片组件,用于展示商品的图片、名称、价格等信息。当用户在浏览不同商品列表时,这个商品卡片组件是可复用的。当用户从一个商品列表页面切换到另一个商品列表页面,之前在第一个页面使用过的商品卡片组件从复用缓存中重新加入到新页面的节点树时,aboutToReuse 函数就会被触发。此时,会根据新页面的商品信息(作为构造参数)来重新初始化商品卡片组件,比如更新图片、名称、价格等展示内容,使其能够准确地展示新的商品信息。
aboutToRecycle --- 表示组件即将被回收
- 含义:aboutToRecycle 函数表示组件即将被回收。它是组件的生命周期回调,在可复用组件从组件树上被加入到复用缓存之前调用。这个阶段主要是为了在组件被回收之前进行一些必要的清理工作,比如释放一些与组件相关的临时资源等,以确保组件在被回收后不会遗留一些不必要的占用,影响系统资源的利用效率。
- 示例场景:仍然以电商应用中的商品卡片组件为例,当用户在一个商品列表页面滚动浏览,使得一些已经展示过的商品卡片组件不再需要展示(比如超出了可视范围)时,这些商品卡片组件就会从组件树上被加入到复用缓存之前,aboutToRecycle 函数就会被触发。此时,可以在这个函数里释放一些与商品卡片组件相关的临时资源,比如之前为了展示商品图片而分配的缓存内存等,以便更好地利用系统资源。
onWillApplyTheme --- 表示组件即将应用主题
- 含义:onWillApplyTheme 函数用于表示组件即将应用主题。它的执行时机是在创建自定义组件的新实例后,在执行其 build () 函数之前,这一点和 aboutToAppear 函数类似。在这个函数中允许改变状态变量,并且所做的更改会在后续执行 build () 函数时生效,从而使组件能够根据主题相关的设置来调整自身的呈现方式。该函数主要用于获取当前组件上下文的 Theme 对象,以便进一步利用主题相关的信息来构建组件。
- 示例场景:在一个手机主题切换应用中,有各种自定义组件用于展示不同的界面元素。当用户切换主题时,对于每个需要应用新主题的自定义组件,在创建新实例后且在执行 build () 函数之前,onWillApplyTheme 函数就会被触发。比如,若新主题是夜间模式,在 onWillApplyTheme 函数中可以根据夜间模式的特点(如颜色较暗、对比度较低等)来改变一些状态变量,比如设置文本颜色为白色,背景颜色为深色等,这些设置会在后续执行 build () 函数时生效,使得组件能够以符合夜间模式的样子呈现出来。
UIAbility组件的生命周期
onCreate --- 会在组件创建时被调用
- 含义:当 UIAbility 组件被创建时,这个函数就会被调用。具体来说,是在 UIAbility 实例处于完全关闭状态下完成创建操作后,紧接着进入该生命周期回调。这里主要针对的是 UIAbility 实例的冷启动情况,也就是从完全未运行的状态启动时会进入这个回调。并且它是一个同步接口,意味着它执行完相关操作后才会继续后续流程,不支持异步回调这种可以先不等待操作完成就继续其他任务的方式。
- 示例场景:比如在一个新安装的手机应用首次打开时,相关的 UIAbility 实例冷启动,onCreate 就会被触发。在这个函数里,可以进行一些初始化的业务逻辑操作,像初始化全局变量、加载一些基础配置文件、建立与数据库的初始连接等,为后续组件的正常运行和展示做好准备。
onDestroy --- 会在组件销毁时被调用
- 含义:它会在 UIAbility 组件要被销毁时被调用,属于 UIAbility 生命周期中的一个回调函数。当组件不再需要存在或者应用关闭等情况导致组件需要清理资源并销毁自身时,就会执行这个回调。它既可以使用同步回调方式,也能通过 Promise 异步回调方式来执行相关的资源清理等操作。
- 示例场景:当用户关闭一个应用程序,或者在应用内部某个功能模块使用完毕后需要释放相关 UIAbility 组件所占用的资源时,onDestroy 就会被触发。在这个函数里,可以关闭之前打开的文件流、释放内存中分配给该组件的缓存数据、取消正在进行的网络请求等,确保资源被合理清理,避免内存泄漏等问题。
onWindowStageCreate --- 会在窗口阶段创建时被调用
- 含义:一旦 WindowStage(可以理解为与窗口相关的一个阶段或对象,用于管理窗口的相关属性和行为)被创建完成,这个函数就会被调用。它主要用于在窗口阶段创建后进行一些与窗口创建相关的初始化操作或者设置。
- 示例场景:在一个桌面应用启动并创建主窗口时,当对应窗口的 WindowStage 创建成功后,onWindowStageCreate 就会被触发。可以在这个函数里设置窗口的初始大小、位置、背景颜色等属性,或者初始化窗口内的一些子组件的布局等。
onWindowStageWillDestroy --- 函数会在窗口阶段即将被销毁时被调用
- 含义:当 WindowStage 即将被销毁时,该函数会被调用。这意味着与窗口相关的这个阶段或对象马上要不存在了,通常在窗口关闭或者应用切换到其他不需要当前窗口的场景时会触发这个回调。
- 示例场景:在一个多窗口的办公应用中,当用户关闭其中一个文档编辑窗口时,在该窗口的 WindowStage 即将被销毁之前,onWindowStageWillDestroy 就会被执行。可以在这个函数里保存当前窗口内的一些编辑状态信息(如文档的光标位置、当前选中的文本内容等)到本地缓存或者数据库,以便下次打开类似窗口时能恢复这些状态。
onWindowStageDestroy--- 会在窗口阶段销毁时被调用
- 含义:在 WindowStage 已经被销毁之后,这个函数会被调用。它标志着与窗口相关的这个阶段或对象彻底结束,相关的窗口资源等也应该已经被清理完毕。
- 示例场景:继续上面多窗口办公应用关闭文档编辑窗口的例子,当窗口的 WindowStage 真正完成销毁操作后,onWindowStageDestroy 就会被触发。此时可以进一步确认一些与窗口相关的资源是否已经全部清理干净,比如释放掉与窗口渲染相关的图形资源等。
onWindowStageRestore --- 是在窗口恢复时调用
- 含义:当迁移多实例 ability(可以理解为一种功能或能力单元,在不同场景下可能有不同表现形式)时,并且在恢复 WindowStage 之后,这个函数会被调用。它主要用于在窗口恢复阶段进行一些特定的操作,以确保窗口能正常展示和运行相关内容。
- 示例场景:在一个云桌面应用中,当用户从一台设备切换到另一台设备登录同一个账号,并且需要迁移相关的应用实例及其窗口时,在恢复 WindowStage 后,onWindowStageRestore 就会被触发。可以在这个函数里重新加载窗口内的一些个性化设置(如壁纸选择、窗口透明度设置等),使得窗口在新设备上能呈现出和原来相似的外观和体验。
onForeground --- 会在组件进入前台时被调用
- 含义:当 UIAbility 组件进入前台时,这个函数会被调用。具体来说,是在应用从后台状态转换到前台状态时触发,属于 UIAbility 生命周期回调的一部分。它是一个同步接口,不支持异步回调,意味着它会在组件完全进入前台后才继续后续流程。
- 示例场景:当用户在手机上正在使用多个应用,将其中一个应用从后台切换到前台(比如点击应用图标或者通过任务切换器选择该应用)时,对于该应用相关的 UIAbility 组件,onForeground 就会被触发。在这个函数里,可以重新启动一些在后台暂停的动画效果、更新显示的数据以反映最新状态等,以便让用户看到组件在前台的最佳呈现。
onBackground --- 会在组件进入后台时被调用
- 含义:当 UIABILITY 组件进入后台时,这个函数会被调用。也就是在应用从前台状态转换到后台状态时触发,同样是 UIABILITY 生命周期回调的一部分,并且也是同步接口,不支持异步回调。
- 示例场景:当用户在手机上正在使用一个应用,然后按下手机的主页键或者切换到其他应用时,对于刚才正在使用的那个应用相关的 UIABILITY 组件,onBackground 就会被触发。在这个函数里,可以暂停一些不必要的动画效果、降低数据更新频率以节省资源等,使得组件在后台能以一种较为节能和稳定的方式存在。
onContinue --- 是在应用继续运行时调用
- 含义:当 Ability 准备迁移时,这个函数会被触发。它主要用于在这种情况下保存相关的数据,以确保在迁移过程中数据不会丢失,并且能在新的环境下继续正常使用。
- 示例场景:在一个跨平台的移动应用中,当用户从手机端切换到平板端使用同一个应用,并且应用需要进行 Ability 迁移时,onContinue 就会被触发。可以在这个函数里将手机端应用中正在处理的数据(如正在编辑的文档内容、购物车中的商品信息等)保存到云端或者本地缓存中,以便在平板端能顺利获取并继续处理这些数据。
onNewWant --- 会在组件接收到新的请求时被调用
- 含义:当 UIABILITY 实例已经启动并在前台运行过,之后由于某些原因切换到后台,然后再次启动该 UIABILITY 实例时,这个函数会被回调执行。这主要针对的是 UIABILITY 实例的热启动情况,也就是在已经有过运行经历的基础上再次启动时进入这个生命周期回调。
- 示例场景:在一个新闻阅读应用中,用户打开一篇新闻文章阅读,然后切换到后台去做其他事情,之后又再次打开这篇新闻文章对应的 UIABILITY 实例时,onNewWant 就会被触发。在这个函数里,可以根据之前的阅读进度、用户的浏览偏好等信息来调整文章的展示方式,比如直接跳转到上次阅读的段落等。
onDump --- 是在应用被 dump 时调用
- 含义:当应用被 dump(可以理解为转储、导出的意思)时,这个函数会被调用。它主要用于转储客户端的一些非敏感信息,比如应用的当前版本、运行状态、一些基本的配置参数等,以便在需要时进行分析或者查看。
- 示例场景:在软件的开发调试过程中,或者在对应用进行故障排查时,当需要了解应用的基本情况时,就可以通过触发 onDump 来获取相关的非敏感信息。例如,开发人员可以通过这个函数获取应用在某个特定时刻的运行状态信息,以便分析是否存在潜在的问题。
onSaveState --- 是在应用保存状态时调用
- 含义:当应用需要保存状态时,这个函数会被调用。它通常是与 appRecovery(可能是一种应用恢复机制)配合使用的。在应用出现故障时,如果已经使能了自动保存状态的功能,那么框架就会回调 onSaveState 来保存 UIABILITY 状态,以确保在故障排除后能恢复到之前的状态。
- 示例场景:在一个游戏应用中,当玩家正在玩游戏过程中,突然遇到系统故障或者应用崩溃的情况,在使能了自动保存状态功能的前提下,onSaveState 就会被触发。可以在这个函数里保存游戏当前的关卡信息、玩家的得分、道具的使用情况等,以便在应用重新启动后能恢复到原来的游戏状态。
onPrepareToTerminate --- 是在应用准备终止时调用
- 含义:当 UIABILITY 生命周期到了准备终止的阶段时,这个函数会被调用。具体来说,当系统预关闭开关打开(通过配置系统参数 persist.sys.prepare_terminate 为 true 来打开),并且在 UIABILITY 关闭时就会触发这个回调。在这个回调中,可以定义一些操作来决定是否继续执行关闭 UIABILITY 的操作。如果 UIABILITY 在退出时需要与用户交互确认是否关闭 UIABILITY,那么可以在此生命周期回调中定义预关闭操作配合 terminateSelf 接口退出,比如通过弹窗确认是否关闭,并配置预关闭生命周期返回 true 取消正常关闭。
- 示例场景:在一个办公应用中,当系统预关闭开关打开,并且要关闭某个 UIABILITY 组件时,onPrepareToTerminate 就会被触发。如果该组件在关闭时需要用户确认,比如弹出一个询问是否关闭的弹窗,并且根据用户的回答(是或否)来决定是否继续关闭操作,那么可以在这个函数里实现这些操作,通过返回值来控制是否取消正常关闭。
onShare --- 是在应用分享时调用
- 含义:当应用需要进行分享时,这个函数会被调用。在跨端分享场景下,它主要用于在 UIABILITY 中设置分享方设备要分享的数据。
- 示例场景:在一个图片分享应用中,当用户选择要分享一张图片时,在 UIABILITY 中对应的 onShare 函数就会被触发。可以在这个函数里获取要分享的图片信息(如图片的路径、分辨率、缩略图等),并设置为分享的数据,以便在跨端分享过程中传递给其他设备或应用。
onBackPressed --- 是在用户按下返回键时调用。
- 含义:当 UIABILITY 侧滑返回时,这个函数会被调用。它属于 UIABILITY 生命周期回调的一部分,并且根据返回值来决定是否销毁 UIABILITY。当 targetSdkVersion <12 时,默认返回值为 false,会销毁 UIABILITY;当 targetSdkVersion>= 12 时,默认返回值为 true,会将 UIABILITY 移动到后台不销毁。
- 示例场景:在一个手机应用中,当用户通过侧滑手势从当前页面返回上一页面时,对于该应用相关的 UIABILITY 组件,onBackPressed 就会被触发。如果是在一个较老版本的应用(targetSdkVersion <12)中,那么可能会直接销毁 UIABILITY,导致页面重新加载等情况;而在新版本的应用(targetSdkVersion>= 12)中,会将 UIABILITY 移动到后台,这样可以更快地恢复到之前的页面状态等。
Navigation 的生命周期
onWillAppear --- 会在组件即将出现时被调用
- 含义:这个函数会在对应的组件即将出现在屏幕等可视区域之前被调用。也就是说,在组件马上要变为可见状态的前夕,系统会触发执行这个函数内定义的代码逻辑。
- 示例场景:比如在一个手机应用的页面切换场景中,当从一个页面将要切换到包含该组件的页面时,在组件实际在新页面呈现出来之前,onWillAppear 就会被调用。此时可以在这个函数里进行一些准备工作,像是预先加载一些数据、初始化某些状态变量等,以便组件在出现后能快速正常地展示相关内容。
onAppear --- 会在组件出现时被调用
- 含义:它会在组件确切地出现在可视区域,也就是真正在屏幕上显示出来的时候被调用。
- 示例场景:继续上面手机应用页面切换的例子,当组件完整地呈现在新页面上,用户能够看到它的时候,onAppear 函数就会执行。在这个函数里可以进行一些和组件显示后相关的操作,比如启动一个动画效果展示组件的入场动画,或者发送一个统计事件告知服务器该组件已成功显示给用户等。
onWillShow --- 会在组件即将显示时被调用
- 含义:和 onWillAppear 类似,也是在组件即将显示的时候被调用,但在一些框架中可能会存在细微差别,比如对于 “显示” 的定义可能会稍有不同(可能涉及到组件从隐藏状态到即将变为完全可见的过渡阶段触发,而不单纯只是初次出现前)。总体来说,强调的是在即将呈现可视状态之前的那一刻。
- 示例场景:在一个具有折叠屏功能的设备上的应用中,当用户展开屏幕使得原本折叠状态下隐藏的某个组件即将完整显示出来时,onWillShow 可能就会被触发。可以在这个函数里调整组件的布局参数以适应新的屏幕空间等准备工作。
onShown --- 会在组件显示时被调用
- 含义:同样类似于 onAppear,意味着组件已经成功显示出来了,不过同样可能在不同框架下与 onAppear 在触发时机上存在些微不同(比如对于显示完成状态的界定细节差异),一般表示组件已完成显示动作。
- 示例场景:在一个多窗口应用场景中,当用户将某个窗口从最小化恢复到正常显示状态,窗口内的组件在完成显示过程后,onShown 函数会执行。此时可以更新组件内与窗口显示状态相关的数据展示等。
onWillHidede --- 会在组件即将隐藏时被调用
- 含义:这里应该是 onWillHide(猜测可能是笔误哦),它会在组件即将进入隐藏状态之前被调用。就是说在组件马上要从当前的可见状态变为不可见之前的瞬间,会触发执行这个函数内的代码。
- 示例场景:在一个视频播放应用中,当用户点击暂停播放并切换到音频播放模式时,视频播放区域的组件(如视频画面显示组件)即将隐藏,此时 onWillHide 就会被调用。可以在这个函数里暂停一些与视频画面显示相关的定时器或者清理一些画面渲染相关的临时资源等。
onHidden --- 会在组件隐藏时被调用
- 含义:在组件已经完全进入隐藏状态之后被调用,表明组件此刻已经不可见了。
- 示例场景:在一个具有分屏功能的应用中,当用户将包含某个组件的分屏窗口最小化,使得该组件彻底隐藏起来后,onHidden 函数就会执行。可以在这个函数里释放一些组件占用的内存资源等,因为组件暂时不需要展示了
onWillDisappear --- 会在组件即将消失时被调用
- 含义:会在组件即将从屏幕或可视区域彻底消失之前被调用,这里的消失可能是因为页面切换、组件被销毁等多种原因导致其不再在可视范围内。
- 示例场景:在一个电商应用的商品详情页面,当用户点击 “返回” 按钮从商品详情页回到商品列表页时,商品详情页上的一些特定组件(如商品图片放大展示组件等)即将消失,onWillDisappear 就会被调用。此时可以保存一些组件当前的状态信息(比如图片的放大倍数等)以便下次再次展示该组件时能恢复相应状态。
onDisappear --- 会在组件消失时被调用
- 含义:在组件已经从可视区域彻底消失之后被调用,意味着组件的整个生命周期中可视阶段已经结束。
- 示例场景:在一个游戏应用中,当玩家完成一关游戏,游戏中的某个辅助提示组件完成了它的使命,在它从屏幕上彻底消失后,onDisappear 函数就会执行。可以在这个函数里进行一些最后的清理工作,比如删除与该组件相关的一些临时文件等。
onBackPressed --- 会在用户按下返回键时被调用
- 含义:会在用户按下设备上的返回键(通常是手机、平板等设备上用于返回上一页面或执行后退操作的按键)时被调用。不同的应用和框架对于按下返回键后的具体处理逻辑可能会有所不同,这个函数就是用来定义在这种情况下要执行的操作。
- 示例场景:在一个新闻阅读应用中,当用户在阅读一篇新闻文章时按下返回键,onBackPressed 函数就会被调用。可能会根据应用的设计选择关闭当前文章详情页并返回新闻列表页,或者提示用户是否要保存阅读进度等操作。