Trong kiến trúc phân tán của HarmonyOS Next, việc hiểu rõ đặc điểm và trạng thái của các thiết bị xung quanh là yếu tố then chốt để xây dựng các trải nghiệm liền mạch. Khả năng truy vấn thông tin chi tiết và lắng nghe các thay đổi trạng thái theo thời gian thực cho phép ứng dụng đưa ra các quyết định điều phối tài nguyên một cách thông minh và tối ưu nhất.
Tầm quan trọng của việc quản lý trạng thái thiết bị
Việc theo dõi trạng thái thiết bị không chỉ đơn thuần là biết thiết bị đó có đang hoạt động hay không. Trong một môi trường phân tán phức tạp, dữ liệu này đóng vai trò:
- Đảm bảo tính liên tục của nghiệp vụ: Khi một thiết bị đang thực hiện tác vụ đột ngột ngoại tuyến, hệ thống có thể ngay lập tức chuyển giao công việc sang một thiết bị khả dụng khác.
- Tối ưu hóa trải nghiệm người dùng: Ứng dụng có thể tự động hiển thị các tùy chọn tương tác dựa trên danh sách các thiết bị đang trực tuyến trong cùng mạng nội bộ.
- Quản lý tài nguyên hiệu quả: Phân bổ các tác vụ nặng cho các thiết bị có cấu hình cao và đang ở trạng thái rảnh rỗi.
Truy vấn thông tin chi tiết thiết bị
HarmonyOS Next cung cấp các API thông qua DistributedDeviceManager để lấy thông tin về các thiết bị tin cậy đã được xác thực. Các thông tin cơ bản bao gồm tên thiết bị, loại thiết bị (điện thoại, máy tính bảng, TV, v.v.), ID định danh và trạng thái kết nối hiện tại.
Dưới đây là ví dụ về cách lấy danh sách các thiết bị khả dụng đồng bộ:
import { distributedDeviceManager } from '@kit.DistributedServiceKit';
import { BusinessError } from '@kit.BasicServicesKit';
function getLocalNetworkDevices() {
try {
// Khởi tạo instance quản lý thiết bị với bundle name của ứng dụng
const dmInstance = distributedDeviceManager.createDeviceManager('com.tech.demo.distributed');
// Lấy danh sách thiết bị đã trực tuyến và được tin cậy
const deviceList = dmInstance.getAvailableDeviceListSync();
if (deviceList && deviceList.length > 0) {
deviceList.forEach(info => {
console.info('--- Thông tin thiết bị ---');
console.info(`Tên: ${info.deviceName}`);
console.info(`Loại: ${info.deviceType}`);
console.info(`ID: ${info.deviceId}`);
console.info(`Trạng thái: ${info.online ? 'Trực tuyến' : 'Ngoại tuyến'}`);
});
} else {
console.info('Không tìm thấy thiết bị tin cậy nào xung quanh.');
}
} catch (err) {
const error = err as BusinessError;
console.error(`Lỗi khi truy vấn thiết bị: ${error.code} - ${error.message}`);
}
}
Giám sát biến động trạng thái thiết bị theo thời gian thực
Để ứng dụng phản ứng kịp thời với các thay đổi như thiết bị mới gia nhập mạng hoặc một thiết bị rời đi, chúng ta cần đăng ký các bộ lắng nghe (listeners). Phương thức on('deviceStateChange') cho phép đăng ký một hàm callback sẽ được kích hoạt mỗi khi có sự thay đổi về trạng thái vật lý hoặc logic của thiết bị trong mạng phân tán.
Ví dụ về triển khai bộ giám sát trạng thái:
import { distributedDeviceManager } from '@kit.DistributedServiceKit';
function subscribeDeviceEvents() {
try {
const manager = distributedDeviceManager.createDeviceManager('com.tech.demo.monitor');
// Đăng ký lắng nghe sự kiện thay đổi trạng thái
manager.on('deviceStateChange', (data) => {
const targetDevice = data.device;
const stateAction = data.action;
console.info(`[Sự kiện] Thiết bị ${targetDevice.deviceName} có thay đổi.`);
switch (stateAction) {
case 'online':
console.info('Trạng thái: Đã kết nối. Sẵn sàng đồng bộ dữ liệu.');
// Thực hiện logic chuẩn bị tài nguyên tại đây
break;
case 'offline':
console.info('Trạng thái: Đã ngắt kết nối. Đang điều chỉnh lại tác vụ.');
// Thực hiện logic dọn dẹp hoặc chuyển giao tác vụ
break;
default:
console.info(`Hành động khác: ${stateAction}`);
break;
}
});
} catch (error) {
console.error('Không thể thiết lập bộ giám sát thiết bị.');
}
}
Các vấn đề kỹ thuật cần lưu ý
Cấu hình quyền truy cập
Để thực hiện truy vấn và giám sát thiết bị phân tán, ứng dụng bắt buộc phải khai báo quyền ohos.permission.DISTRIBUTED_DATASYNC trong tệp cấu hình module.json5. Thiếu quyền này sẽ dẫn đến lỗi thực thi khi gọi các phương thức khởi tạo DeviceManager.
Điều kiện môi trường mạng
Các thiết bị chỉ có thể "nhìn thấy" nhau khi thỏa mãn các điều kiện sau:
- Cùng kết nối vào một mạng Wi-Fi/LAN cục bộ hoặc đã được ghép nối qua Bluetooth.
- Đã đăng nhập cùng một tài khoản Huawei (đối với các thiết bị yêu cầu tính năng tin cậy mức tài khoản).
- Tính năng "Phát hiện thiết bị" (Device Discovery) đã được bật trong phần cài đặt hệ thống.
Xử lý bất đồng bộ và vòng đời
Khi đăng ký các listener, cần đảm bảo hủy đăng ký (sử dụng phương thức off) khi ứng dụng hoặc component bị hủy để tránh rò rỉ bộ nhớ và các tác vụ chạy ngầm không cần thiết, ảnh hưởng đến hiệu suất pin của thiết bị.