1. 鸿蒙系统中的 WebSocket 心跳协议
- 原理:在鸿蒙应用开发里,WebSocket 心跳协议的底层逻辑和通用的 WebSocket 心跳一致。由于鸿蒙系统也会运行在各类智能设备上,网络环境复杂多变,为维持长连接,客户端与服务器需定时发送心跳包。例如在一个跨设备协同办公的鸿蒙应用场景下,手机端与智能平板端通过 WebSocket 实时同步文档编辑状态,心跳包能保证连接不断,避免因长时间无数据交互,被中间网络设备切断链路。
- 代码示例:使用鸿蒙的 ArkTS 语言,结合
@ohos.net.webSocket
模块实现。
import webSocket from '@ohos.net.webSocket';// 创建 WebSocket 连接
let socket = webSocket.createWebSocket('ws://your-server-url');
// 开启心跳定时器
setInterval(() => {if (socket.readyState === webSocket.WebSocket.OPEN) {socket.send('ping');}
}, 5000);socket.onmessage = (event) => {let data = JSON.parse(event.data);if (data === 'pong') {console.log('Heartbeat received, connection is stable.');}
};
2. 常用生命周期
鸿蒙面试-----鸿蒙组件生命周期详解_鸿蒙 onappear-CSDN博客
3. Axios 封装及请求拦截器钩子函数(在鸿蒙应用集成 Axios 场景下)
- 封装思路:创建一个独立的 JavaScript 模块,导入 Axios,设置基础 URL、超时时间等全局配置。在封装函数里,返回 Axios 实例,这样便于统一管理请求,不同页面调用封装后的函数就能发起规范的网络请求。
- 请求拦截器钩子函数:Axios 使用
interceptors.request.use
作为请求拦截钩子。在封装时,拦截器常用于添加通用的请求头,例如添加认证 token。示例如下:
import axios from 'axios';const instance = axios.create({baseURL: 'https://your-api-base-url',timeout: 5000
});instance.interceptors.request.use((config) => {const token = localStorage.getItem('user_token');if (token) {config.headers['Authorization'] = `Bearer ${token}`;}return config;
}, error => {return Promise.reject(error);
});export default instance;
4. navigation 和 router 的区别
易用性层面:
- Navigation天然具备标题、内容、回退按钮的功能联动,开发者可以直接使用此能力。Router
- 若要实现此能力,需要自行定义;
- Navigation的页面是由组件构成,易于实现共享元素的转场
功能层面:
- Navigation天然支持一多,Router不支持;
- Navigation没有路由数量限制,Router限制32个;
- Navigation可以获取到路由栈NavPathStack,并对路由栈进行操作;
- Navigation可以嵌套在模态对话框中,也就是说可以模态框中定义路由,Router不支持;
- Navigation的组件全量由开发者自行控制,开发者可以自定义复杂的动效和属性的设置(背景、模糊等),Router的page对象不对外暴露,开发者无法对page进行处理
性能层面
- Navigation传递参数性能更优,Navigation通过引用传递,Router通过深拷贝完成;
- Navigation可以配合动态加载,实现组件动态加载,Router页面使用@Entry进行修饰,当前模块加载时会生成全量页面。
5. 鸿蒙系统中的数据持久化
- 用户首选项(Preferences):通常用于保存应用的配置信息。数据通过文本的形式保存在设备中,应用使用过程中会将文本中的数据全量加载到内存中,所以访问速度快、效率高,但不适合需要存储大量数据的场景。
- 键值型数据库(KV-Store):一种非关系型数据库,其数据以“键值”对的形式进行组织、索引和存储,其中“键”作为唯一标识符。适合很少数据关系和业务关系的业务数据存储,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。相比于关系型数据库,更容易做到跨设备跨版本兼容。
- 关系型数据库(RelationalStore):一种关系型数据库,以行和列的形式存储数据,广泛用于应用中的关系型数据的处理,包括一系列的增、删、改、查等接口,开发者也可以运行自己定义的SQL语句来满足复杂业务场景的需要。