日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
HarmonyOS基礎之Fraction用法介紹

想了解更多內(nèi)容,請訪問:

我們提供的服務有:成都網(wǎng)站設計、網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、洛川ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的洛川網(wǎng)站制作公司

和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos.

前言

Fraction字面意思為分數(shù)、極小一部分,在Ability或者AbilitySlice中它實際也是頁面的一部分,不能單獨使用。Fraction的生命周期狀態(tài)取決于它的容器,如果容器被銷毀,其中的所有部分也將被銷毀。我們可以使用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源碼我們可以看出其內(nèi)部提供了getFractionManager()方法,該方法返回的FractionManager是管理Fraction的生命周期的關鍵方法。

那么下面就讓我們來簡單使用一下Fraction。

首先我們創(chuàng)建一個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.  

 布局文件創(chuàng)建完成后我們再來新建一個類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就創(chuàng)建好了,接下來就是將它添加到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方法探索

我們已經(jīng)學習了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調(diào)度器,字面理解應該就是

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),這個方法具體是做什么的呢,結合上文我們發(fā)現(xiàn)它是與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()調(diào)用效果。

可以看出SecondFraction,F(xiàn)irstFraction,TestFraction依次被移除

重新運行項目,我們在調(diào)用popFromStack(String tag, int flags)方法,將tag設置為"2",FirstFraction查看運行效果。

SecondFraction,F(xiàn)irstFraction同時被移除了

通過實踐可以看出popFromStack()每次調(diào)用會移除堆棧頂部的Fraction,popFromStack(String tag, int flags)則會移除tag以及其上層所有Fraction。

了解了具體作用,在今后我們的開發(fā)場景中可以根據(jù)需求對Fraction進行管理。

Fraction的生命周期

研究了Fraction的具體用法,下面我們就來探索一下Fraction在Ability中的生命周期情況。

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

我們在每個方法中添加日志運行程序查看生命周期具體情況。

啟動Fraction

依次調(diào)用onComponentAttached、onStart、onActive方法

按下home進入后臺

依次調(diào)用onInactive、onBackground方法

返回前臺

依次調(diào)用onForeground、onActive方法

退出應用

依次調(diào)用onInactive、onBackground、onStop、onComponentDetach方法

總結:

通過本次學習,我們了解了Fraction的基本用法,F(xiàn)raction所涉及到的關鍵類以及其中開放的關鍵方法,最后還探索了Fraction的生命周期,當然 Fraction 也有缺陷 在實際開發(fā)中,我們可能需要讓Fraction嵌套Fraction,目前鴻蒙還不支持Fraction嵌套Fraction。所以在使用過程中我們要避免Fraction嵌套走彎路。

想了解更多內(nèi)容,請訪問:

和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos.


當前名稱:HarmonyOS基礎之Fraction用法介紹
URL網(wǎng)址:http://www.dlmjj.cn/article/cdecshs.html