当前位置: 首页 > 知识库问答 >
问题:

碎片生命周期的混淆

潘畅
2023-03-14

我有一个mainActivity承载一个ViewPager并包含三个选项卡(MQTT、ECO、Logger)。mainActivity具有生命周期回调(onCreat,onResume),其他三个选项卡具有片段的生命周期回调(onattached,onCreateView,onViewcreated,onResume,onPause)。

在运行时,我在logCat中收到以下信息:

01-29 13:28:28.732: W/MainActivity(31412): @onCreate().
01-29 13:28:28.802: W/MainActivity(31412): @onResume().
01-29 13:28:28.842: W/MQTT_Settings_Frag(31412): @onAttach().
01-29 13:28:28.842: W/MQTT_Settings_Frag(31412): @onCreateView().
01-29 13:28:28.862: W/MQTT_Settings_Frag(31412): @onViewCreated().
01-29 13:28:28.862: W/MQTT_Settings_Frag(31412): @onResume().
01-29 13:28:28.862: W/Eco_Settings_Frag(31412): @onAttach().
01-29 13:28:28.862: W/Eco_Settings_Frag(31412): @onCreateView().
01-29 13:28:28.892: W/Eco_Settings_Frag(31412): @onViewCreated().
01-29 13:28:28.892: W/Eco_Settings_Frag(31412): @onResume().
01-29 13:37:27.062: W/MQTT_Settings_Frag(31412): @onPause().

当我从日志记录选项卡回刷到生态选项卡时,LogCat会显示以下内容:

01-29 13:37:52.292: W/MQTT_Settings_Frag(31412): @onCreateView().
01-29 13:37:52.322: W/MQTT_Settings_Frag(31412): @onViewCreated().
01-29 13:37:52.322: W/MQTT_Settings_Frag(31412): @onResume().


why the first tab "MQTT-Tab" goes in onPause() when i goto only to the third Tab Logger-Tab?
And why the first tab "MQTT-Tab" goes into (onCreateView, onViewCreated, onResume) when i move to the secondtab Eco-tab frm the third one LoggerTab?

共有1个答案

逑俊楚
2023-03-14

默认情况下,ViewPager只在内存中保留相邻的选项卡,因此,当您转到第三个选项卡时,第一个选项卡会被销毁,而当您返回到中间选项卡时,会重新创建。您可以使用YourViewPager.SetOffScreenPageLimit(int)来改变这种行为。

 类似资料:
  • 每当一个片段显示给用户时,我需要执行一些代码。 通过查看API,我能看到的最接近的钩子方法是onResume。但是,从我的代码调试来看,当用户选择back-button返回到先前显示的片段时,似乎没有调用onResume。 为了澄清我看到的行为: 我有一个“parent”活动,它在ActionBar中配置选项卡...和2个片段F1和F2。 用户选择一个选项卡,F1被加载到活动中。按下按钮,用户就可

  • 我想了解Android中活动生命周期和片段生命周期之间的相互作用,所以我决定启动一个新项目并从这个页面复制代码 然后我想,为了提高我的理解力,在平板电脑上测试它,改变它的方向,看看它发生了什么(尽管可能不是为了这个目的)。通过logcat,我跟踪在活动和国家/地区片段上触发的主要事件,例如在activity Oncreate中,我写道: 这是我从纵向视图开始,然后旋转时得到的结果: TAG:活动:

  • 注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch  在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa

  • 我们大致为WebAPplication设计了4个生命周期: 请求初始化其实就是从URL中解析提取出{module}, {action}, {method}; 然后再根据{module}, {action}, {method}找到对应的Controller文件; 然后再调用对应的{method},完了之后再发送响应。当然响应的过程中肯定是要顺带着解析下模板标签啦。 恩,这就完了,貌似感觉很简单啊。

  • 如下图. 可以看出,基本周期是: created mounted updated (update 可以理解成人肉手动操作触发) destroyed 上面步骤中的 1,3,4都是自动触发。 每个步骤都有对应的 beforeXyz方法 所以, 我们一般使用mounted 作为页面初始化时执行的方法

  • 概览 组件的生命周期分为三个阶段:挂载、渲染、卸载,下图展示了解组件在整个生命周期中所涉及到的方法调用、原型方法调用和状态变化。 挂载阶段 从组件实例被创建再到被插入根组件树中,所经历的操作如下: 初始化组件实例。 根据组件类型绑定对应的原型。 调用 proto->init() 原型方法。 标记组件需要刷新全部样式。 因父组件变为另外一个组件,触发 link 事件。 更新阶段 当组件被插入到根组件