第三篇:应用开发基础
11. Ability框架:Page/Service/Data Ability深度解析
1. Ability框架概述
Ability是HarmonyOS应用的基本组成单元,分为Page Ability、Service Ability和Data Ability三种类型:
-
Page Ability:用于提供用户界面,承载UI交互。
-
Service Ability:用于后台任务处理,无界面。
-
Data Ability:用于数据共享与访问,提供统一的数据接口。
2. Page Ability详解
Page Ability是应用与用户交互的核心,其生命周期包括以下状态:
-
onStart():Ability可见但未获得焦点。
-
onActive():Ability获得焦点,可交互。
-
onInactive():Ability失去焦点。
-
onBackground():Ability进入后台。
-
onStop():Ability销毁。
代码示例:创建Page Ability
TypeScript
import Ability from '@ohos.application.Ability';
import window from '@ohos.window';
export default class MainAbility extends Ability {
onStart() {
console.log('MainAbility onStart');
// 创建窗口
window.create(this.context, "mainWindow", (err, data) => {
if (err) {
console.error('Failed to create window. Cause: ' + JSON.stringify(err));
return;
}
// 加载页面
this.context.loadContent('pages/index', (err, data) => {
if (err) {
console.error('Failed to load the content. Cause: ' + JSON.stringify(err));
return;
}
console.log('Succeeded in loading the content. Data: ' + JSON.stringify(data));
});
});
}
onActive() {
console.log('MainAbility onActive');
}
onInactive() {
console.log('MainAbility onInactive');
}
onBackground() {
console.log('MainAbility onBackground');
}
onStop() {
console.log('MainAbility onStop');
}
}
3. Service Ability详解
Service Ability用于执行后台任务,如音乐播放、文件下载等。其生命周期包括:
-
onStart():Service启动时调用。
-
onCommand():每次启动Service时调用。
-
onConnect():绑定Service时调用。
-
onDisconnect():解绑Service时调用。
-
onStop():Service停止时调用。
代码示例:创建Service Ability
TypeScript
import Ability from '@ohos.application.Ability';
export default class MyServiceAbility extends Ability {
onStart() {
console.log('MyServiceAbility onStart');
}
onCommand(want, startId) {
console.log('MyServiceAbility onCommand');
// 执行后台任务
this.downloadFile();
}
onConnect(want) {
console.log('MyServiceAbility onConnect');
return new MyRemoteObject();
}
onDisconnect(want) {
console.log('MyServiceAbility onDisconnect');
}
onStop() {
console.log('MyServiceAbility onStop');
}
downloadFile() {
// 模拟文件下载
console.log('Downloading file...');
}
}
class MyRemoteObject extends rpc.RemoteObject {
constructor() {
super();
}
onRemoteRequest(code, data, reply, option) {
console.log('MyRemoteObject onRemoteRequest');
return true;
}
}
4. Data Ability详解
Data Ability用于跨应用数据共享,支持对数据库、文件等数据源的统一访问。其核心方法包括:
-
insert():插入数据。
-
delete():删除数据。
-
update():更新数据。
-
query():查询数据。
代码示例:创建Data Ability
TypeScript
import Ability from '@ohos.application.Ability';
import dataAbility from '@ohos.data.dataAbility';
export default class MyDataAbility extends Ability {
onStart() {
console.log('MyDataAbility onStart');
}
insert(uri, valueBucket, callback) {
console.log('MyDataAbility insert');
// 插入数据逻辑
callback(null, 1); // 返回插入的行ID
}
delete(uri, predicates, callback) {
console.log('MyDataAbility delete');
// 删除数据逻辑
callback(null, 1); // 返回删除的行数
}
update(uri, valueBucket, predicates, callback) {
console.log('MyDataAbility update');
// 更新数据逻辑
callback(null, 1); // 返回更新的行数
}
query(uri, columns, predicates, callback) {
console.log('MyDataAbility query');
// 查询数据逻辑
const result = [{ id: 1, name: 'HarmonyOS' }];
callback(null, result);
}
}
5. 实践建议
-
Page Ability:合理管理生命周期,避免内存泄漏。
-
Service Ability:长时间任务建议使用后台任务管理器。
-
Data Ability:设计清晰的数据访问接口,确保数据安全。
12. 应用生命周期管理与状态保存机制
1. 应用生命周期概述
HarmonyOS应用的生命周期包括:
-
启动:应用从冷启动到前台运行。
-
后台:应用进入后台,可能被系统回收。
-
销毁:应用被用户或系统终止。
2. 状态保存与恢复
-
onSaveState():保存临时状态。
TypeScriptimport Ability from '@ohos.application.Ability'; export default class MainAbility extends Ability { onSaveState() { console.log('MainAbility onSaveState'); return { key: 'value' }; // 返回需要保存的状态 } onRestoreState(state) { console.log('MainAbility onRestoreState'); console.log('Restored state:', state); } }
-
onRestoreState():恢复临时状态。
代码示例:状态保存与恢复
3. 实践建议
-
及时保存关键状态,避免数据丢失。
-
恢复状态时检查数据有效性。
13. 资源文件管理与多语言国际化实践
1. 资源文件管理
-
资源目录结构 :
resources/base/
存放默认资源,resources/zh_CN/
存放中文资源。 -
资源类型:字符串、颜色、尺寸、图片等。
2. 多语言国际化
-
定义多语言字符串 :在
resources/base/element/string.json
中定义默认语言,在resources/zh_CN/element/string.json
中定义中文。 -
代码中引用资源:
TypeScript
import Resource from '@ohos.resource';
let str = this.context.resourceManager.getString($r('app.string.hello'));
console.log(str);
3. 实践建议
-
使用资源ID而非硬编码。
-
定期检查资源文件的完整性和一致性。
14. 日志系统与高效调试方法论
1. 日志系统
-
日志级别:debug、info、warn、error。
-
代码示例:
typescript
复制
import hilog from '@ohos.hilog';
hilog.info(0x0000, 'testTag', 'This is a log message.');
2. 调试方法论
-
使用DevEco Studio的断点调试功能。
-
结合日志和性能分析工具定位问题。
15. 应用签名与发布流程详解
1. 应用签名
-
生成签名证书。
-
配置签名信息。
2. 发布流程
-
打包应用。
-
提交至应用市场。