提供組件創(chuàng)建、銷毀、前后臺切換等生命周期回調(diào)

2024-01-22 18:57 更新

UIAbility是包含UI界面的應(yīng)用組件,提供組件創(chuàng)建、銷毀、前后臺切換等生命周期回調(diào),同時也具備組件協(xié)同的能力,組件協(xié)同主要提供如下常用功能:

  • Caller:由startAbilityByCall接口返回,CallerAbility(調(diào)用者)可使用Caller與CalleeAbility(被調(diào)用者)進行通信。
  • Callee:UIAbility的內(nèi)部對象,CalleeAbility(被調(diào)用者)可以通過Callee與Caller進行通信。
說明

本模塊首批接口從API version 9 開始支持。后續(xù)版本的新增接口,采用上角標單獨標記接口的起始版本。

本模塊接口僅可在Stage模型下使用。

導(dǎo)入模塊

  1. import Ability from '@ohos.app.ability.UIAbility';

屬性

系統(tǒng)能力:以下各項對應(yīng)的系統(tǒng)能力均為SystemCapability.Ability.AbilityRuntime.AbilityCore

名稱類型可讀可寫說明
contextUIAbilityContext上下文。
launchWantWantUIAbility啟動時的參數(shù)。
lastRequestWantWantUIAbility最后請求時的參數(shù)。
calleeCallee調(diào)用Stub(樁)服務(wù)對象。

UIAbility.onCreate

onCreate(want: Want, param: AbilityConstant.LaunchParam): void;

Ability創(chuàng)建時回調(diào),執(zhí)行初始化業(yè)務(wù)邏輯操作。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
wantWant當前UIAbility的Want類型信息,包括ability名稱、bundle名稱等。
paramAbilityConstant.LaunchParam創(chuàng)建UIAbility、上次異常退出的原因信息。

示例:

  1. class myAbility extends Ability {
  2. onCreate(want, param) {
  3. console.log('onCreate, want:' + want.abilityName);
  4. }
  5. }

UIAbility.onWindowStageCreate

onWindowStageCreate(windowStage: window.WindowStage): void

當WindowStage創(chuàng)建后調(diào)用。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
windowStagewindow.WindowStageWindowStage相關(guān)信息。

示例:

  1. class myAbility extends Ability {
  2. onWindowStageCreate(windowStage) {
  3. console.log('onWindowStageCreate');
  4. }
  5. }

UIAbility.onWindowStageDestroy

onWindowStageDestroy(): void

當WindowStage銷毀后調(diào)用。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

示例:

  1. class myAbility extends Ability {
  2. onWindowStageDestroy() {
  3. console.log('onWindowStageDestroy');
  4. }
  5. }

UIAbility.onWindowStageRestore

onWindowStageRestore(windowStage: window.WindowStage): void

當遷移多實例ability時,恢復(fù)WindowStage后調(diào)用。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
windowStagewindow.WindowStageWindowStage相關(guān)信息。

示例:

  1. class myAbility extends Ability {
  2. onWindowStageRestore(windowStage) {
  3. console.log('onWindowStageRestore');
  4. }
  5. }

UIAbility.onDestroy

onDestroy(): void | Promise<void>;

Ability生命周期回調(diào),在銷毀時回調(diào),執(zhí)行資源清理等操作。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

示例:

  1. class myAbility extends Ability {
  2. onDestroy() {
  3. console.log('onDestroy');
  4. }
  5. }

UIAbility.onForeground

onForeground(): void;

Ability生命周期回調(diào),當應(yīng)用從后臺轉(zhuǎn)到前臺時觸發(fā)。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

示例:

  1. class myAbility extends Ability {
  2. onForeground() {
  3. console.log('onForeground');
  4. }
  5. }

UIAbility.onBackground

onBackground(): void;

Ability生命周期回調(diào),當應(yīng)用從前臺轉(zhuǎn)到后臺時觸發(fā)。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

示例:

  1. class myAbility extends Ability {
  2. onBackground() {
  3. console.log('onBackground');
  4. }
  5. }

UIAbility.onContinue

onContinue(wantParam: { [key: string]: Object }): AbilityConstant.OnContinueResult;

當ability遷移準備遷移時觸發(fā),保存數(shù)據(jù)。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
wantParam{[key: string]: any}want相關(guān)參數(shù)。

返回值:

類型說明
AbilityConstant.OnContinueResult繼續(xù)的結(jié)果。

示例:

  1. import AbilityConstant from '@ohos.app.ability.AbilityConstant';
  2. class MyUIAbility extends Ability {
  3. onContinue(wantParams) {
  4. console.log('onContinue');
  5. wantParams['myData'] = 'my1234567';
  6. return AbilityConstant.OnContinueResult.AGREE;
  7. }
  8. }

UIAbility.onNewWant

onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void;

當傳入新的Want,ability再次被拉起時會回調(diào)執(zhí)行該方法。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
wantWantWant類型參數(shù),如ability名稱,包名等。
launchParamsAbilityConstant.LaunchParamUIAbility啟動的原因、上次異常退出的原因信息。

示例:

  1. class MyUIAbility extends Ability {
  2. onNewWant(want, launchParams) {
  3. console.log('onNewWant, want:' + want.abilityName);
  4. console.log('onNewWant, launchParams:' + JSON.stringify(launchParams));
  5. }
  6. }

UIAbility.onDump

onDump(params: Array<string>): Array<string>;

轉(zhuǎn)儲客戶端信息時調(diào)用。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
paramsArray<string>表示命令形式的參數(shù)。

示例:

  1. class myAbility extends Ability {
  2. onDump(params) {
  3. console.log('dump, params:' + JSON.stringify(params));
  4. return ['params'];
  5. }
  6. }

UIAbility.onSaveState

onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: Object}): AbilityConstant.OnSaveResult;

該API配合appRecovery使用。在應(yīng)用故障時,如果使能了自動保存狀態(tài),框架將回調(diào)onSaveState保存Ability狀態(tài)。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
reasonAbilityConstant.StateType回調(diào)保存狀態(tài)的原因。
wantParam{[key: string]: any}want相關(guān)參數(shù)。

返回值:

類型說明
AbilityConstant.OnSaveResult是否同意保存當前Ability的狀態(tài)。

示例:

  1. import AbilityConstant from '@ohos.app.ability.AbilityConstant';
  2. class MyUIAbility extends Ability {
  3. onSaveState(reason, wantParam) {
  4. console.log('onSaveState');
  5. wantParam['myData'] = 'my1234567';
  6. return AbilityConstant.OnSaveResult.RECOVERY_AGREE;
  7. }
  8. }

Caller

通用組件Caller通信客戶端調(diào)用接口, 用來向通用組件服務(wù)端發(fā)送約定數(shù)據(jù)。

Caller.call

call(method: string, data: rpc.Parcelable): Promise<void>;

向通用組件服務(wù)端發(fā)送約定序列化數(shù)據(jù)。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
methodstring約定的服務(wù)端注冊事件字符串。
datarpc.Parcelable由開發(fā)者實現(xiàn)的Parcelable可序列化數(shù)據(jù)。

返回值:

類型說明
Promise<void>Promise形式返回應(yīng)答。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. class MyMessageAble{ // 自定義的Parcelable數(shù)據(jù)結(jié)構(gòu)
  2. name:''
  3. str:''
  4. num: 1
  5. constructor(name, str) {
  6. this.name = name;
  7. this.str = str;
  8. }
  9. marshalling(messageSequence) {
  10. messageSequence.writeInt(this.num);
  11. messageSequence.writeString(this.str);
  12. console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
  13. return true;
  14. }
  15. unmarshalling(messageSequence) {
  16. this.num = messageSequence.readInt();
  17. this.str = messageSequence.readString();
  18. console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
  19. return true;
  20. }
  21. };
  22. let method = 'call_Function'; // 約定的通知消息字符串
  23. let caller;
  24. export default class MainAbility extends Ability {
  25. onWindowStageCreate(windowStage) {
  26. this.context.startAbilityByCall({
  27. bundleName: 'com.example.myservice',
  28. abilityName: 'MainAbility',
  29. deviceId: ''
  30. }).then((obj) => {
  31. caller = obj;
  32. let msg = new MyMessageAble('msg', 'world'); // 參考Parcelable數(shù)據(jù)定義
  33. caller.call(method, msg)
  34. .then(() => {
  35. console.log('Caller call() called');
  36. })
  37. .catch((callErr) => {
  38. console.log('Caller.call catch error, error.code: ' + JSON.stringify(callErr.code) +
  39. ' error.message: ' + JSON.stringify(callErr.message));
  40. });
  41. }).catch((err) => {
  42. console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  43. ' error.message: ' + JSON.stringify(err.message));
  44. });
  45. }
  46. }

Caller.callWithResult

callWithResult(method: string, data: rpc.Parcelable): Promise<rpc.MessageSequence>;

向通用組件服務(wù)端發(fā)送約定序列化數(shù)據(jù), 并將服務(wù)端返回的約定序列化數(shù)據(jù)帶回。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
methodstring約定的服務(wù)端注冊事件字符串。
datarpc.Parcelable由開發(fā)者實現(xiàn)的Parcelable可序列化數(shù)據(jù)。

返回值:

類型說明
Promise<rpc.MessageSequence>Promise形式返回通用組件服務(wù)端應(yīng)答數(shù)據(jù)。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. class MyMessageAble{
  2. name:''
  3. str:''
  4. num: 1
  5. constructor(name, str) {
  6. this.name = name;
  7. this.str = str;
  8. }
  9. marshalling(messageSequence) {
  10. messageSequence.writeInt(this.num);
  11. messageSequence.writeString(this.str);
  12. console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
  13. return true;
  14. }
  15. unmarshalling(messageSequence) {
  16. this.num = messageSequence.readInt();
  17. this.str = messageSequence.readString();
  18. console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
  19. return true;
  20. }
  21. };
  22. let method = 'call_Function';
  23. let caller;
  24. export default class MainAbility extends Ability {
  25. onWindowStageCreate(windowStage) {
  26. this.context.startAbilityByCall({
  27. bundleName: 'com.example.myservice',
  28. abilityName: 'MainAbility',
  29. deviceId: ''
  30. }).then((obj) => {
  31. caller = obj;
  32. let msg = new MyMessageAble(1, 'world');
  33. caller.callWithResult(method, msg)
  34. .then((data) => {
  35. console.log('Caller callWithResult() called');
  36. let retmsg = new MyMessageAble(0, '');
  37. data.readParcelable(retmsg);
  38. })
  39. .catch((callErr) => {
  40. console.log('Caller.callWithResult catch error, error.code: ' + JSON.stringify(callErr.code) +
  41. ' error.message: ' + JSON.stringify(callErr.message));
  42. });
  43. }).catch((err) => {
  44. console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  45. ' error.message: ' + JSON.stringify(err.message));
  46. });
  47. }
  48. }

Caller.release

release(): void;

主動釋放通用組件服務(wù)端的通信接口。

系統(tǒng)能力:SystemCapability.UIAbility.UIAbilityRuntime.UIAbilityCore

錯誤碼:

錯誤碼ID錯誤信息
401Invalid input parameter.
16200001Caller released. The caller has been released.
16200002Callee invalid. The callee does not exist.
16000050Internal Error.

示例:

  1. let caller;
  2. export default class MainAbility extends Ability {
  3. onWindowStageCreate(windowStage) {
  4. this.context.startAbilityByCall({
  5. bundleName: 'com.example.myservice',
  6. abilityName: 'MainAbility',
  7. deviceId: ''
  8. }).then((obj) => {
  9. caller = obj;
  10. try {
  11. caller.release();
  12. } catch (releaseErr) {
  13. console.log('Caller.release catch error, error.code: ' + JSON.stringify(releaseErr.code) +
  14. ' error.message: ' + JSON.stringify(releaseErr.message));
  15. }
  16. }).catch((err) => {
  17. console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  18. ' error.message: ' + JSON.stringify(err.message));
  19. });
  20. }
  21. }

Caller.onRelease

onRelease(callback: OnReleaseCallback): void;

注冊通用組件服務(wù)端Stub(樁)斷開監(jiān)聽通知。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
callbackOnReleaseCallback返回onRelease回調(diào)結(jié)果。

示例:

  1. let caller;
  2. export default class MainAbility extends Ability {
  3. onWindowStageCreate(windowStage) {
  4. this.context.startAbilityByCall({
  5. bundleName: 'com.example.myservice',
  6. abilityName: 'MainAbility',
  7. deviceId: ''
  8. }).then((obj) => {
  9. caller = obj;
  10. try {
  11. caller.onRelease((str) => {
  12. console.log(' Caller OnRelease CallBack is called ' + str);
  13. });
  14. } catch (error) {
  15. console.log('Caller.onRelease catch error, error.code: ' + JSON.stringify(error.code) +
  16. ' error.message: ' + JSON.stringify(error.message));
  17. }
  18. }).catch((err) => {
  19. console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  20. ' error.message: ' + JSON.stringify(err.message));
  21. });
  22. }
  23. }

Caller.on

on(type: 'release', callback: OnReleaseCallback): void;

注冊通用組件服務(wù)端Stub(樁)斷開監(jiān)聽通知。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
typestring監(jiān)聽releaseCall事件,固定為'release'。
callbackOnReleaseCallback返回onRelease回調(diào)結(jié)果。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. let caller;
  2. export default class MainAbility extends Ability {
  3. onWindowStageCreate(windowStage) {
  4. this.context.startAbilityByCall({
  5. bundleName: 'com.example.myservice',
  6. abilityName: 'MainAbility',
  7. deviceId: ''
  8. }).then((obj) => {
  9. caller = obj;
  10. try {
  11. caller.on('release', (str) => {
  12. console.log(' Caller OnRelease CallBack is called ' + str);
  13. });
  14. } catch (error) {
  15. console.log('Caller.on catch error, error.code: ' + JSON.stringify(error.code) +
  16. ' error.message: ' + JSON.stringify(error.message));
  17. }
  18. }).catch((err) => {
  19. console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  20. ' error.message: ' + JSON.stringify(err.message));
  21. });
  22. }
  23. }

Caller.off

off(type: 'release', callback: OnReleaseCallback): void;

取消注冊通用組件服務(wù)端Stub(樁)斷開監(jiān)聽通知。預(yù)留能力,當前暫未支持。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
typestring監(jiān)聽releaseCall事件,固定為'release'。
callbackOnReleaseCallback返回off回調(diào)結(jié)果。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. let caller;
  2. export default class MainUIAbility extends Ability {
  3. onWindowStageCreate(windowStage) {
  4. this.context.startAbilityByCall({
  5. bundleName: 'com.example.myservice',
  6. abilityName: 'MainUIAbility',
  7. deviceId: ''
  8. }).then((obj) => {
  9. caller = obj;
  10. try {
  11. let onReleaseCallBack = (str) => {
  12. console.log(' Caller OnRelease CallBack is called ' + str);
  13. };
  14. caller.on('release', onReleaseCallBack);
  15. caller.off('release', onReleaseCallBack);
  16. } catch (error) {
  17. console.log('Caller.on or Caller.off catch error, error.code: ' + JSON.stringify(error.code) +
  18. ' error.message: ' + JSON.stringify(error.message));
  19. }
  20. }).catch((err) => {
  21. console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  22. ' error.message: ' + JSON.stringify(err.message));
  23. });
  24. }
  25. }

Caller.off

off(type: 'release'): void;

取消注冊通用組件服務(wù)端Stub(樁)斷開監(jiān)聽通知。預(yù)留能力,當前暫未支持。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
typestring監(jiān)聽releaseCall事件,固定為'release'。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. let caller;
  2. export default class MainUIAbility extends Ability {
  3. onWindowStageCreate(windowStage) {
  4. this.context.startAbilityByCall({
  5. bundleName: 'com.example.myservice',
  6. abilityName: 'MainUIAbility',
  7. deviceId: ''
  8. }).then((obj) => {
  9. caller = obj;
  10. try {
  11. let onReleaseCallBack = (str) => {
  12. console.log(' Caller OnRelease CallBack is called ' + str);
  13. };
  14. caller.on('release', onReleaseCallBack);
  15. caller.off('release');
  16. } catch (error) {
  17. console.error('Caller.on or Caller.off catch error, error.code: ' + JSON.stringify(error.code) +
  18. ' error.message: ' + JSON.stringify(error.message));
  19. }
  20. }).catch((err) => {
  21. console.error('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
  22. ' error.message: ' + JSON.stringify(err.message));
  23. });
  24. }
  25. }

Callee

通用組件服務(wù)端注冊和解除客戶端caller通知送信的callback接口。

Callee.on

on(method: string, callback: CalleeCallback): void;

通用組件服務(wù)端注冊消息通知callback。

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

參數(shù):

參數(shù)名類型必填說明
methodstring與客戶端約定的通知消息字符串。
callbackCalleeCallback一個rpc.MessageSequence類型入?yún)⒌膉s通知同步回調(diào)函數(shù), 回調(diào)函數(shù)至少要返回一個空的rpc.Parcelable數(shù)據(jù)對象, 其他視為函數(shù)執(zhí)行錯誤。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. class MyMessageAble{
  2. name:''
  3. str:''
  4. num: 1
  5. constructor(name, str) {
  6. this.name = name;
  7. this.str = str;
  8. }
  9. marshalling(messageSequence) {
  10. messageSequence.writeInt(this.num);
  11. messageSequence.writeString(this.str);
  12. console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
  13. return true;
  14. }
  15. unmarshalling(messageSequence) {
  16. this.num = messageSequence.readInt();
  17. this.str = messageSequence.readString();
  18. console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
  19. return true;
  20. }
  21. };
  22. let method = 'call_Function';
  23. function funcCallBack(pdata) {
  24. console.log('Callee funcCallBack is called ' + pdata);
  25. let msg = new MyMessageAble('test', '');
  26. pdata.readParcelable(msg);
  27. return new MyMessageAble('test1', 'Callee test');
  28. }
  29. export default class MainAbility extends Ability {
  30. onCreate(want, launchParam) {
  31. console.log('Callee onCreate is called');
  32. try {
  33. this.callee.on(method, funcCallBack);
  34. } catch (error) {
  35. console.log('Callee.on catch error, error.code: ' + JSON.stringify(error.code) +
  36. ' error.message: ' + JSON.stringify(error.message));
  37. }
  38. }
  39. }

Callee.off

off(method: string): void;

解除通用組件服務(wù)端注冊消息通知callback。

系統(tǒng)能力:SystemCapability.UIAbility.UIAbilityRuntime.UIAbilityCore

參數(shù):

參數(shù)名類型必填說明
methodstring已注冊的通知事件字符串。

錯誤碼:

錯誤碼ID錯誤信息
401If the input parameter is not valid parameter.
其他ID見元能力子系統(tǒng)錯誤碼 

示例:

  1. let method = 'call_Function';
  2. export default class MainAbility extends Ability {
  3. onCreate(want, launchParam) {
  4. console.log('Callee onCreate is called');
  5. try {
  6. this.callee.off(method);
  7. } catch (error) {
  8. console.log('Callee.off catch error, error.code: ' + JSON.stringify(error.code) +
  9. ' error.message: ' + JSON.stringify(error.message));
  10. }
  11. }
  12. }

OnReleaseCallback

(msg: string): void;

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

名稱可讀可寫類型說明
(msg: string)function調(diào)用者注冊的偵聽器函數(shù)接口的原型。

CalleeCallback

(indata: rpc.MessageSequence): rpc.Parcelable;

系統(tǒng)能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

名稱可讀可寫類型說明
(indata: rpc.MessageSequence)rpc.Parcelable被調(diào)用方注冊的消息偵聽器函數(shù)接口的原型。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號