成人免费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

2020-12-04 12:42:59

組件鴻蒙Text

2021-01-12 09:42:05

鴻蒙HarmonyOSPage Abilit

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-15 11:57:49

Hi3861 HarmonyOS開發板

2020-12-23 11:24:34

鴻蒙開發IDE安裝

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-12-18 11:05:25

鴻蒙HarmonyOS游戲

2020-12-29 11:51:16

鴻蒙HarmonyOS華為手機

2021-07-01 09:19:56

鴻蒙HarmonyOS應用

2020-12-11 09:58:45

ShapeElemenXML自定義組件樣式

2020-12-16 10:05:48

鴻蒙開發板Onenet平臺

2020-12-07 12:34:33

開發板鴻蒙hello world

2012-12-07 09:47:58

數據中心空軍基地瑞士
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费淫片aa视频免费 | 福利视频网 | 麻豆国产一区二区三区四区 | 四虎影音| 成人av网站在线观看 | 成人免费影院 | 在线一区 | 精品欧美一区二区中文字幕视频 | 99久久久久久 | 久久看精品 | 欧美日韩一区二区在线观看 | 亚洲精品在线播放 | 免费视频二区 | 久久精品亚洲 | 国产激情毛片 | 中文字幕一区二区三区精彩视频 | 91欧美精品成人综合在线观看 | 亚洲视频中文字幕 | 中文字幕在线网 | 精品免费国产视频 | 伊人春色成人 | 日本久久综合 | 久久精品一区二区 | 国产999精品久久久 日本视频一区二区三区 | 99re6在线视频精品免费 | 婷婷色国产偷v国产偷v小说 | 激情五月综合网 | 成人免费精品视频 | 亚洲一区二区三区视频免费观看 | 大香网伊人 | 成人国内精品久久久久一区 | 每日在线更新av | 精品国产欧美一区二区三区不卡 | 久久久精品一区 | 亚洲精品中文字幕在线 | 国产网站在线免费观看 | 日韩精品久久久久 | 久久大陆 | 久久精品国产99国产精品 | 国产999精品久久久影片官网 | 成人在线免费网站 |