美文网首页
Fraction的使用和生命周期

Fraction的使用和生命周期

作者: 裴云飞 | 来源:发表于2021-01-03 18:45 被阅读0次

    一、前言

    鸿蒙系统—打造通用的底部导航栏这篇文章中,我们封装了一个通用的底部导航栏,当时点击底部导航栏的时候只给出了一个提示信息。安卓有fragment组件,由于当时我以为鸿蒙并没有类似于fragment的组件,所以点击底部导航栏的时候就只给了一个提示信息。后来发现我错了,原来鸿蒙早就提供了类似于fragment的组件,那就是Fraction。这次就向大家介绍Fraction的使用以及Fraction的生命周期。可能有人会问,为什么不使用AbilitySlice?一个AbilitySlice跳转到另一个AbilitySlice会发生页面跳转,而在点击底部导航栏的时候,我们并不希望发生页面跳转。

    二、基本概念

    • Fraction
      字面意思是小部分,Fraction可以作为UI的一部分放在Ability或者AbilitySlice中,不能单独使用,需要添加到Ability或者AbilitySlice中才能使用。Fraction的生命周期状态取决于它的容器。如果容器被销毁,其中的所有部分也将被销毁。可以Fraction使用定义各种布局,以丰富应用程序的用户界面。
    • FractionAbility
      要想使用Fraction,必须让Ability继承FractionAbility
    • FractionManager
      提供管理Fraction生命周期的方法。
    • FractionScheduler
      提供执行Fraction事务的方法。

    三、简单使用

    1、MainAbility继承FractionAbility

    public class MainAbility extends FractionAbility {
    
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            super.setMainRoute(MainAbilitySlice.class.getName());
        }
    }
    

    2、给AbilitySlice创建布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_parent"
        ohos:orientation="vertical"
        ohos:background_element="$graphic:background_ability_main"
        ohos:width="match_parent">
    
        <StackLayout
            ohos:id="$+id:stack"
            ohos:width="match_parent"
            ohos:height="match_parent"/>
    
    </DirectionalLayout>
    

    3、给Fraction创建布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_parent"
        ohos:orientation="vertical"
        ohos:background_element="$graphic:background_ability_other"
        ohos:width="match_parent">
    
        <Text
            ohos:background_element="$graphic:background_ability_main"
            ohos:height="match_content"
            ohos:id="$+id:text_helloworld"
            ohos:layout_alignment="horizontal_center"
            ohos:text="你好,世界"
            ohos:text_size="50"
            ohos:width="match_content"
        />
    
    </DirectionalLayout>
    

    4、创建HomeFraction继承Fraction,在onComponentAttached方法里面将HoneFraction的布局文件转换成组件对象,最后将组件对象返回。
    我们刚刚在AbilitySlice的布局文件中添加了一个栈布局,onComponentAttached方法返回的组件对象会被添加这个栈布局里面。

    public class HomeFraction extends Fraction {
    
        @Override
        protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) {
            Component component = scatter.parse(ResourceTable.Layout_fraction_home, container, false);
            return component;
        }
    
        @Override
        protected void onStart(Intent intent) {
            super.onStart(intent);
    
        }
    }
    

    5、在AbilitySlice里面调用getAbility方法,将其强转为FractionAbility,然后调用getFractionManager方法得到FractionManager对象,再调用startFractionScheduler方法开启事务,调用add方法添加fraction,add方法第一个参数就是我们在布局文件中添加的栈布局的id,第二个参数就是HomeFraction对象,第三个参数就是给HomeFraction设置一个标签,后续可以FractionManager的getFractionByTag方法,来查找我们已经创建好的HomeFraction对象,getFractionByTag方法的参数就是我们在add方法里面给HoneFraction设置的标签。最后提交事务。

    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            super.setUIContent(ResourceTable.Layout_ability_main);
            ((FractionAbility)getAbility()).getFractionManager()
                    .startFractionScheduler()
                    .add(ResourceTable.Id_stack, new HomeFraction(), "home_fraction")
                    .submit();
        }
    
        @Override
        public void onActive() {
            super.onActive();
        }
    
        @Override
        public void onForeground(Intent intent) {
            super.onForeground(intent);
        }
    }
    

    代码运行后就会在页面上显示fraction_home.xml布局文件中的布局

    四、Fraction生命周期

    Fraction生命周期主要涉及到八个生命周期方法,分别是onComponentAttached、onStart、onActive、onInactive、onBackground、onForeground、onStop、onComponentDetach

    • 启动fraction
      依次调用onComponentAttached、onStart、onActive
    • 按下home键进入后台
      依次调用onInactive、onBackground
    • 重新回到前台
      依次调用onForeground、onActive
    • 退出fraction
      依次调用onInactive、onBackground、onStop、onComponentDetach
      大家牢记fraction的生命周期

    五、Fraction的缺点

    在实际开发中,我们可能需要让Fraction嵌套Fraction,目前鸿蒙还不支持Fraction嵌套Fraction。

    最后附上源码

    相关文章

      网友评论

          本文标题:Fraction的使用和生命周期

          本文链接:https://www.haomeiwen.com/subject/ubtpoktx.html