HarmonyOS基础之Fraction用法介绍

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

我们提供的服务有:成都网站设计、网站建设、微信公众号开发、网站优化、网站认证、洛川ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的洛川网站制作公司

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

https://harmonyos.

前言

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

Fraction使用

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

 
 
 
 
  1. public class FractionAbility extends Ability { 
  2.     public FractionAbility() { 
  3.         throw new RuntimeException("Stub!"); 
  4.     } 
  5.  
  6.     public FractionManager getFractionManager() { 
  7.         throw new RuntimeException("Stub!"); 
  8.     } 
  9.  
  10.     ... 

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

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

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

 
 
 
 
  1.  
  2.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.     ohos:height="match_parent" 
  4.     ohos:width="match_parent"> 
  5.     
  6.         ohos:text_size="25fp" 
  7.         ohos:center_in_parent="true" 
  8.         ohos:text="First Fraction" 
  9.         ohos:height="match_content" 
  10.         ohos:width="match_content"/> 
  11.  

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

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

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

 
 
 
 
  1.  
  2.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.     ohos:height="match_parent" 
  4.     ohos:width="match_parent" 
  5.     ohos:alignment="center" 
  6.     ohos:orientation="vertical"> 
  7.  
  8.     
  9.         ohos:id="$+id:fraction_container" 
  10.         ohos:height="match_parent" 
  11.         ohos:width="match_parent" 
  12.         ohos:bottom_margin="45vp"> 
  13.      
  14.  
  15.  

 TestFractionAbility继承FractionAbility。

 
 
 
 
  1. public class TestFractionAbility extends FractionAbility { 
  2.     @Override 
  3.     public void onStart(Intent intent) { 
  4.         super.onStart(intent); 
  5.         super.setUIContent(ResourceTable.Layout_ability_test_fraction); 
  6.  
  7.         FractionManager fractionManager = getFractionManager(); 
  8.         fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new TestFraction()).submit(); 
  9.     } 

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

FractionManager方法探索

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

 
 
 
 
  1. public class FractionManager { 
  2.     FractionManager() { 
  3.         throw new RuntimeException("Stub!"); 
  4.     } 
  5.  
  6.     public FractionScheduler startFractionScheduler() { 
  7.         throw new RuntimeException("Stub!"); 
  8.     } 
  9.  
  10.     public void popFromStack() { 
  11.         throw new RuntimeException("Stub!"); 
  12.     } 
  13.  
  14.     public void popFromStack(String tag, int flags) { 
  15.         throw new RuntimeException("Stub!"); 
  16.     } 
  17.  
  18.     public Optional getFractionByTag(String tag) { 
  19.         throw new RuntimeException("Stub!"); 
  20.     } 

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

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

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

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

 
 
 
 
  1. public abstract class FractionScheduler { 
  2.     public FractionScheduler() { 
  3.         throw new RuntimeException("Stub!"); 
  4.     } 
  5.  
  6.     public abstract FractionScheduler add(int var1, Fraction var2); 
  7.  
  8.     public abstract FractionScheduler add(int var1, Fraction var2, String var3); 
  9.  
  10.     public abstract FractionScheduler replace(int var1, Fraction var2); 
  11.  
  12.     public abstract FractionScheduler remove(Fraction var1); 
  13.  
  14.     public abstract FractionScheduler hide(Fraction var1); 
  15.  
  16.     public abstract FractionScheduler show(Fraction var1); 
  17.  
  18.     public abstract int submit(); 
  19.  
  20.     public abstract FractionScheduler pushIntoStack(String var1); 

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

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

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

 
 
 
 
  1. fractionManager = getFractionManager(); 
  2. fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new TestFraction()).pushIntoStack("1").submit(); 
  3. fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new FirstFraction()).pushIntoStack("2").submit(); 
  4. fractionManager.startFractionScheduler().add(ResourceTable.Id_fraction_container, new SecondFraction()).pushIntoStack("3").submit(); 
  5.  
  6. fun1.setClickedListener(new Component.ClickedListener() { 
  7.     @Override 
  8.     public void onClick(Component component) { 
  9.         System.out.println("fractionManager.popFromStack()"); 
  10.         fractionManager.popFromStack(); 
  11.     } 
  12. }); 
  13.  
  14. fun2.setClickedListener(new Component.ClickedListener() { 
  15.     @Override 
  16.     public void onClick(Component component) { 
  17.         System.out.println("fractionManager.popFromStack(\"\",1)"); 
  18.         fractionManager.popFromStack("2",1); 
  19.     } 
  20. }); 

往同一个容器中添加三个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.

本文名称:HarmonyOS基础之Fraction用法介绍
分享路径:http://www.36103.cn/qtweb/news27/16677.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联