成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2020征文-TV【鴻蒙基地】圖解鴻蒙Page Ability的LaunchType

系統
在Page Ability的配置信息(config.json文件)中有一個launchType屬性,通過模板默認生成的值是standard,這是launchType屬性的默認值(可以不設置launchType,這樣默認值就是standard)。launchType屬性的另外一個可以設置的值是singleton。

 [[360492]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

在Page Ability的配置信息(config.json文件)中有一個launchType屬性,通過模板默認生成的值是standard,這是launchType屬性的默認值(可以不設置launchType,這樣默認值就是standard)。launchType屬性的另外一個可以設置的值是singleton。這兩個屬性值的區別如下:

standard:在任何情況下,無論Page Ability被顯示多少次,都會創建一個新的Page Ability實例;

singleton:如果要顯示的Page Ability在棧頂,那么再次顯示這個Page Ability時,不會再創建新的Page Ability實例,而是直接使用這個Page Ability實例。如果Page Ability上面有其他的Page Ability,那么首先彈出這些Page Ability,然后再重用這個Page Ability。總之,擁有singleton模式的Page Ability將永遠使用唯一的實例;

這里涉及到一個棧的概念,這是HarmonyOS管理Page Ability的模式。HarmonyOS App同時只能顯示一個Page Ability,那么哪一個Page Ability才能顯示呢?HarmonyOS App會使用一個棧來管理App中所有的Page Ability,只有在棧頂的Page Ability才會顯示。如果要想讓棧中第2個Page Ability顯示,那么棧頂的Page Ability就必須出棧,也就是銷毀Page Ability,也就是調用terminateAbility方法要完成的工作。

下面用圖示來說明這一過程。圖1中每一個矩形區域表示App中當前用于保存Page Ability的棧。1中只有一個Page Ability1,如果讓Page Ability2顯示,那么Page Ability2必須壓棧,Page Ability3顯示也需要完成同樣的工作。在3的狀態中,如果讓Page Ability2顯示,那么Page Ability3必須出棧,就形成了4中棧的狀態。


現在假設Page Ability1的launchType屬性值是standard,那么從Page Ability1中啟動Page Ability1,如果啟動2次,就會再創建兩個Page Ability1實例,這時棧的狀態如圖2所示。


很明顯,在棧中有3個Page Ability1實例。

如果Page Ability1的launchType屬性值是singleton,那么不管顯示多少次Page Ability1,在棧中永遠只有1個Page Ability1實例。所以如果想讓某一個Page Ability1永遠只有一個實例的時候,可以將該Page Ability的launchType屬性值設為singleton。

下面通過一個案例來演示standard和singleton的區別。

首先創建一個名為LaunchTypeAbility的Page Ability,并編寫下面的代碼:

  1. package com.unitymarvel.demo.ability; 
  2.  
  3. import com.unitymarvel.demo.ResourceTable; 
  4.  
  5. import ohos.aafwk.ability.Ability; 
  6.  
  7. import ohos.aafwk.content.Intent; 
  8.  
  9. import ohos.agp.components.Button; 
  10.  
  11. import ohos.agp.components.Component; 
  12.  
  13. import ohos.agp.components.Text; 
  14.  
  15. public class LaunchTypeAbility extends Ability { 
  16.  
  17. private static int count = 0; // 計數器 
  18.  
  19. @Override 
  20.  
  21. public void onStart(Intent intent) { 
  22.  
  23. super.onStart(intent); 
  24.  
  25. super.setUIContent(ResourceTable.Layout_launch_type_layout); 
  26.  
  27. count++; 
  28.  
  29. Text text = (Text)findComponentById(ResourceTable.Id_text); 
  30.  
  31. if(text != null) { 
  32.  
  33. text.setText(String.valueOf(count)); 
  34.  
  35.  
  36. Button buttonStartAbility = (Button)findComponentById(ResourceTable.Id_button_start_ability); 
  37.  
  38. if(buttonStartAbility != null) { 
  39.  
  40. buttonStartAbility.setClickedListener(new Component.ClickedListener() { 
  41.  
  42. @Override 
  43.  
  44. public void onClick(Component component) { 
  45.  
  46. Intent intent = new Intent(); 
  47.  
  48. intent.setAction("action.harmonyos.demo.ability.testlaunchtype"); 
  49.  
  50. // 顯示另外一個Page Ability 
  51.  
  52. startAbility(intent); 
  53.  
  54.  
  55. }); 
  56.  
  57.  
  58.  

 在config.json文件中配置LaunchTypeAbility,代碼如下:

  1.  
  2. "skills": [ 
  3.  
  4.  
  5. "actions": [ 
  6.  
  7. "action.harmonyos.demo.ability.launchtype" 
  8.  
  9.  
  10.  
  11. ], 
  12.  
  13. "orientation""landscape"
  14.  
  15. "formEnabled"false
  16.  
  17. "name""com.unitymarvel.demo.ability.LaunchTypeAbility"
  18.  
  19. "icon""$media:icon"
  20.  
  21. "label""Page Ability的啟動類型"
  22.  
  23. "type""page"
  24.  
  25. "launchType""standard" 
  26.  

 這里將LaunchTypeAbility的launchType屬性值設為standard。

然后再創建另外一個名為TestLaunchTypeAbility的Page Ability,代碼如下:

  1. package com.unitymarvel.demo.ability; 
  2.  
  3. import com.unitymarvel.demo.ResourceTable; 
  4.  
  5. import ohos.aafwk.ability.Ability; 
  6.  
  7. import ohos.aafwk.content.Intent; 
  8.  
  9. import ohos.agp.components.Button; 
  10.  
  11. import ohos.agp.components.Component; 
  12.  
  13. import ohos.agp.components.Text; 
  14.  
  15. public class TestLaunchTypeAbility extends Ability { 
  16.  
  17. @Override 
  18.  
  19. public void onStart(Intent intent) { 
  20.  
  21. super.onStart(intent); 
  22.  
  23. super.setUIContent(ResourceTable.Layout_launch_type_layout); 
  24.  
  25. Button buttonStartAbility = 
  26.  
  27. (Button)findComponentById(ResourceTable.Id_button_start_ability); 
  28.  
  29. if(buttonStartAbility != null) { 
  30.  
  31. buttonStartAbility.setClickedListener(new Component.ClickedListener() { 
  32.  
  33. @Override 
  34.  
  35. public void onClick(Component component) { 
  36.  
  37. Intent intent = new Intent(); 
  38.  
  39. intent.setAction("action.harmonyos.demo.ability.launchtype"); 
  40.  
  41. // 顯示LaunchTypeAbility 
  42.  
  43. startAbility(intent); 
  44.  
  45.  
  46. }); 
  47.  
  48.  
  49.  

 本例包含兩個Page Ability:LaunchTypeAbility和TestLaunchTypeAbility。目前這兩個Page Ability的launchType屬性值都是standard。這兩個Page Ability的關系是LaunchTypeAbility顯示TestLaunchTypeAbility,然后TestLaunchTypeAbility再顯示LaunchTypeAbility,如圖3所示。


在LaunchTypeAbility類中有一個靜態變量count,如果每次顯示LaunchTypeAbility時都創建一個新的實例,那么count會不斷加1,例如,如果顯示3次LaunchTypeAbility,應該看到如圖4所示的窗口。


如果將LaunchTypeAbility的launchType屬性值改成singleton,那么不管顯示多少次LaunchTypeAbility,計數器count的值永遠是1,如圖5所示。因為LaunchTypeAbility在創建一個實例后,就不會再創建新的LaunchTypeAbility實例了,所以onStart方法自然就不會再次調用了。


歡迎訪問李寧老師的【鴻蒙基地】專欄:https://harmonyos.51cto.com/column/17

李寧老師的課程主頁:https://edu.51cto.com/lecturer/974126.html

[[360497]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 【編輯推薦】

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2021-01-06 10:59:14

鴻蒙HarmonyOSPage Abilit

2020-12-09 11:53:24

鴻蒙開發HelloWord

2020-12-28 10:15:18

鴻蒙HarmonyOSListContain

2021-01-12 09:42:05

鴻蒙HarmonyOSPage Abilit

2020-12-04 12:42:59

組件鴻蒙Text

2020-12-23 11:45:27

鴻蒙HarmonyOSTextField組件

2020-12-17 12:06:49

鴻蒙應用鴻蒙開發

2020-12-04 12:22:03

鴻蒙UI組件

2020-12-22 09:48:18

鴻蒙HarmonyOS應用程序

2020-12-23 11:24:34

鴻蒙開發IDE安裝

2020-12-15 11:57:49

Hi3861 HarmonyOS開發板

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-12-07 12:34:33

開發板鴻蒙hello world

2021-07-01 09:19:56

鴻蒙HarmonyOS應用

2020-12-14 09:58:28

鴻蒙HarmonyOS手表游戲

2020-12-11 12:27:35

鴻蒙HarmonyOS

2020-12-16 10:05:48

鴻蒙開發板Onenet平臺

2020-12-18 11:05:25

鴻蒙HarmonyOS游戲

2020-12-29 11:51:16

鴻蒙HarmonyOS華為手機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品激情 | 久久国产传媒 | 精品久久久久久国产 | 久草热线 | 亚洲性人人天天夜夜摸 | 欧美日韩国产中文字幕 | 久草.com | 国产精品美女久久久久久免费 | 91精品国产综合久久久久 | 91精品国产综合久久久动漫日韩 | 亚洲精品久久区二区三区蜜桃臀 | 亚洲一区二区三区视频 | 久久久久久久国产精品影院 | 中文字幕第5页 | 日韩色综合| 夜夜操天天干 | 欧美一区二区三区电影 | 99re视频| 国产激情视频网 | 欧美精品一区二区三区在线播放 | 国产丝袜一区二区三区免费视频 | 国产精品国产a级 | 亚洲视频二区 | 成人av免费| 午夜小电影 | 欧美性生交大片免费 | 国产成人99久久亚洲综合精品 | 6080亚洲精品一区二区 | av免费在线播放 | 青青伊人久久 | 黄色免费网站在线看 | 欧美一级α片 | 麻豆精品国产91久久久久久 | 亚洲福利一区二区 | 99久久精品免费看国产小宝寻花 | 国产成人一区二区 | 亚洲高清在线观看 | 天天玩天天干天天操 | 欧美一页 | 久久久999精品 | 91精品国产综合久久精品 |