自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

 [[360492]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

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

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

standard:在任何情況下,無(wú)論P(yáng)age Ability被顯示多少次,都會(huì)創(chuàng)建一個(gè)新的Page Ability實(shí)例;

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

這里涉及到一個(gè)棧的概念,這是HarmonyOS管理Page Ability的模式。HarmonyOS App同時(shí)只能顯示一個(gè)Page Ability,那么哪一個(gè)Page Ability才能顯示呢?HarmonyOS App會(huì)使用一個(gè)棧來(lái)管理App中所有的Page Ability,只有在棧頂?shù)腜age Ability才會(huì)顯示。如果要想讓棧中第2個(gè)Page Ability顯示,那么棧頂?shù)腜age Ability就必須出棧,也就是銷毀Page Ability,也就是調(diào)用terminateAbility方法要完成的工作。

下面用圖示來(lái)說(shuō)明這一過(guò)程。圖1中每一個(gè)矩形區(qū)域表示App中當(dāng)前用于保存Page Ability的棧。1中只有一個(gè)Page Ability1,如果讓Page Ability2顯示,那么Page Ability2必須壓棧,Page Ability3顯示也需要完成同樣的工作。在3的狀態(tài)中,如果讓Page Ability2顯示,那么Page Ability3必須出棧,就形成了4中棧的狀態(tài)。


現(xiàn)在假設(shè)Page Ability1的launchType屬性值是standard,那么從Page Ability1中啟動(dòng)Page Ability1,如果啟動(dòng)2次,就會(huì)再創(chuàng)建兩個(gè)Page Ability1實(shí)例,這時(shí)棧的狀態(tài)如圖2所示。


很明顯,在棧中有3個(gè)Page Ability1實(shí)例。

如果Page Ability1的launchType屬性值是singleton,那么不管顯示多少次Page Ability1,在棧中永遠(yuǎn)只有1個(gè)Page Ability1實(shí)例。所以如果想讓某一個(gè)Page Ability1永遠(yuǎn)只有一個(gè)實(shí)例的時(shí)候,可以將該P(yáng)age Ability的launchType屬性值設(shè)為singleton。

下面通過(guò)一個(gè)案例來(lái)演示standard和singleton的區(qū)別。

首先創(chuàng)建一個(gè)名為L(zhǎng)aunchTypeAbility的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; // 計(jì)數(shù)器 
  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. // 顯示另外一個(gè)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的啟動(dòng)類型"
  22.  
  23. "type""page"
  24.  
  25. "launchType""standard" 
  26.  

 這里將LaunchTypeAbility的launchType屬性值設(shè)為standard。

然后再創(chuàng)建另外一個(gè)名為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.  

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


在LaunchTypeAbility類中有一個(gè)靜態(tài)變量count,如果每次顯示LaunchTypeAbility時(shí)都創(chuàng)建一個(gè)新的實(shí)例,那么count會(huì)不斷加1,例如,如果顯示3次LaunchTypeAbility,應(yīng)該看到如圖4所示的窗口。


如果將LaunchTypeAbility的launchType屬性值改成singleton,那么不管顯示多少次LaunchTypeAbility,計(jì)數(shù)器count的值永遠(yuǎn)是1,如圖5所示。因?yàn)長(zhǎng)aunchTypeAbility在創(chuàng)建一個(gè)實(shí)例后,就不會(huì)再創(chuàng)建新的LaunchTypeAbility實(shí)例了,所以onStart方法自然就不會(huì)再次調(diào)用了。


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

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

[[360497]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

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

 【編輯推薦】

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2020-12-09 11:53:24

鴻蒙開發(fā)HelloWord

2020-12-28 10:15:18

鴻蒙HarmonyOSListContain

2020-12-04 12:42:59

組件鴻蒙Text

2021-01-06 10:59:14

鴻蒙HarmonyOSPage Abilit

2021-01-12 09:42:05

鴻蒙HarmonyOSPage Abilit

2020-12-23 11:45:27

鴻蒙HarmonyOSTextField組件

2020-12-17 12:06:49

鴻蒙應(yīng)用鴻蒙開發(fā)

2020-12-04 12:22:03

鴻蒙UI組件

2020-12-22 09:48:18

鴻蒙HarmonyOS應(yīng)用程序

2020-12-23 11:24:34

鴻蒙開發(fā)IDE安裝

2020-12-07 12:34:33

開發(fā)板鴻蒙hello world

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-12-14 09:58:28

鴻蒙HarmonyOS手表游戲

2020-12-11 12:27:35

鴻蒙HarmonyOS

2020-12-16 10:05:48

鴻蒙開發(fā)板Onenet平臺(tái)

2020-12-23 09:58:37

HarmonyOSHAPAPP

2020-12-11 09:58:45

ShapeElemenXML自定義組件樣式

2020-12-15 09:33:40

鴻蒙Hi3861開發(fā)板
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)