应用开发

HarmonyOS基础之Fraction用法介绍

时间:2010-12-5 17:23:32  作者:IT科技   来源:域名  查看:  评论:0
内容摘要:想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com前言Fraction字面意思为分数、极小一部分,在Ability或者AbilitySlic

想了解更多内容,基介绍请访问:

和华为官方合作共建的用法鸿蒙技术社区

https://harmonyos.51cto.com

前言

Fraction字面意思为分数、极小一部分,基介绍在Ability或者AbilitySlice中它实际也是用法页面的一部分,不能单独使用。基介绍Fraction的用法生命周期状态取决于它的容器,如果容器被销毁,基介绍其中的用法所有部分也将被销毁。我们可以使用Fraction定义各种布局,基介绍以丰富应用程序的用法用户界面。下面就向大家介绍一下Fraction的基介绍具体用法以及其生命周期。

Fraction使用

首先想要使用Fraction,用法我们必须让Ability继承FractionAbility。基介绍

public class FractionAbility extends Ability {      public FractionAbility() {          throw new RuntimeException("Stub!");     }     public FractionManager getFractionManager() {          throw new RuntimeException("Stub!");     }     ... } 

为什么一定需要继承FractionAbility,用法通过FractionAbility源码我们可以看出其内部提供了getFractionManager()方法,基介绍该方法返回的FractionManager是管理Fraction的生命周期的关键方法。

那么下面就让我们来简单使用一下Fraction。

首先我们创建一个layout,为Fraction的布局文件fraction_first.xml。

<?xml version="1.0" encoding="utf-8"?> <DependentLayout     xmlns:ohos="http://schemas.huawei.com/res/ohos"     ohos:height="match_parent"     ohos:width="match_parent">     <Text         ohos:text_size="25fp"         ohos:center_in_parent="true"         ohos:text="First Fraction"         ohos:height="match_content"         ohos:width="match_content"/> </DependentLayout> 

 布局文件创建完成后我们再来新建一个类TestFraction继承Fraction。

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

就这样一个简单的云服务器提供商Fraction就创建好了,接下来就是将它添加到Ability中,布局文件ability_test_fraction.xml。

<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout     xmlns:ohos="http://schemas.huawei.com/res/ohos"     ohos:height="match_parent"     ohos:width="match_parent"     ohos:alignment="center"     ohos:orientation="vertical">      <StackLayout         ohos:id="$+id:fraction_container"         ohos:height="match_parent"         ohos:width="match_parent"         ohos:bottom_margin="45vp">     </StackLayout>  </DirectionalLayout> 

 TestFractionAbility继承FractionAbility。

public class TestFractionAbility extends FractionAbility {      @Override     public void onStart(Intent intent) {          super.onStart(intent);         super.setUIContent(ResourceTable.Layout_ability_test_fraction);          FractionManager fractionManager = getFractionManager();         fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new TestFraction()).submit();     } } 

 就这样,TestFraction就成功的被添加到了Ability中,ability_test_fraction.xml中的fraction_container就是放置TestFraction的容器,在摸机器运行效果如下:

FractionManager方法探索

我们已经学习了Fraction的简单用法,下面再来研究下对Fraction管理的关键类FractionManager。

public class FractionManager {      FractionManager() {          throw new RuntimeException("Stub!");     }      public FractionScheduler startFractionScheduler() {          throw new RuntimeException("Stub!");     }      public void popFromStack() {          throw new RuntimeException("Stub!");     }      public void popFromStack(String tag, int flags) {          throw new RuntimeException("Stub!");     }      public Optional<Fraction> getFractionByTag(String tag) {          throw new RuntimeException("Stub!");     } } 

这里有startFractionScheduler(),popFromStack(),popFromStack(String tag, int flags),getFractionByTag(String tag)四个方法。

getFractionByTag(String tag)方法很明显就是通过tag获取已添加的Fraction,那么popFromStack()方法的作用是什么呢?

为了研究该方法的用途,我们先来看下看下startFractionScheduler(),该方法返回了FractionScheduler对象Fraction调度器,字面理解应该就是

Fraction的管理器,下面来看下FractionScheduler提供了哪些方法管理Fraction。

public abstract class FractionScheduler {      public FractionScheduler() {          throw new RuntimeException("Stub!");     }      public abstract FractionScheduler add(int var1, Fraction var2);      public abstract FractionScheduler add(int var1, Fraction var2, String var3);      public abstract FractionScheduler replace(int var1, Fraction var2);      public abstract FractionScheduler remove(Fraction var1);      public abstract FractionScheduler hide(Fraction var1);      public abstract FractionScheduler show(Fraction var1);      public abstract int submit();      public abstract FractionScheduler pushIntoStack(String var1); } 

这里通过代码我们可以很直观的看出FractionScheduler是个抽象类,服务器托管里面提供了对Fraction的添加,替换,移除,展示的方法,并且最终通过submit()方法提交操作。

其中有个很特别的方法pushIntoStack(String var1),这个方法具体是做什么的呢,结合上文我们发现它是与popFromStack()方法配合使用的,一个添加一个移除。

下面我们就写个简单的示例演示下该方法的使用。

fractionManager = getFractionManager(); fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new TestFraction()).pushIntoStack("1").submit(); fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new FirstFraction()).pushIntoStack("2").submit(); fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new SecondFraction()).pushIntoStack("3").submit();  fun1.setClickedListener(new Component.ClickedListener() {      @Override     public void onClick(Component component) {          System.out.println("fractionManager.popFromStack()");         fractionManager.popFromStack();     } });  fun2.setClickedListener(new Component.ClickedListener() {      @Override     public void onClick(Component component) {          System.out.println("fractionManager.popFromStack(\"\",1)");         fractionManager.popFromStack("2",1);     } }); 

往同一个容器中添加三个Fraction,并且都使用pushIntoStack(“”)方法将Fraction添加到堆栈中,先来看popFromStack()调用效果。

可以看出SecondFraction,FirstFraction,TestFraction依次被移除

重新运行项目,我们在调用popFromStack(String tag, int flags)方法,将tag设置为"2",FirstFraction查看运行效果。

SecondFraction,FirstFraction同时被移除了

通过实践可以看出popFromStack()每次调用会移除堆栈顶部的Fraction,popFromStack(String tag, int flags)则会移除tag以及其上层所有Fraction。

了解了具体作用,在今后我们的网站模板开发场景中可以根据需求对Fraction进行管理。

Fraction的生命周期

研究了Fraction的具体用法,下面我们就来探索一下Fraction在Ability中的生命周期情况。

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

我们在每个方法中添加日志运行程序查看生命周期具体情况。

启动Fraction

依次调用onComponentAttached、onStart、onActive方法

按下home进入后台

依次调用onInactive、onBackground方法

返回前台

依次调用onForeground、onActive方法

退出应用

依次调用onInactive、onBackground、onStop、onComponentDetach方法

总结:

通过本次学习,我们了解了Fraction的基本用法,Fraction所涉及到的关键类以及其中开放的关键方法,最后还探索了Fraction的生命周期,当然 Fraction 也有缺陷 在实际开发中,我们可能需要让Fraction嵌套Fraction,目前鸿蒙还不支持Fraction嵌套Fraction。所以在使用过程中我们要避免Fraction嵌套走弯路。

想了解更多内容,请访问:

和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

-->
copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap