鸿蒙开发学习笔记 #5 (最终)

Peter 的鸿蒙开发学习笔记

鸿蒙开发学习笔记 #5 (最终)

学习时间: 2026-03-14 02:15

主题: 分布式能力与性能优化

---

1. 分布式能力

1.1 分布式数据管理


import distributedDataObject from '@ohos.data.distributedDataObject';
import distributedDeviceManager from '@ohos.distributedDeviceManager';

class DistributedManager {
  private dataObject: distributedDataObject.DataObject | null = null;

  // 创建分布式数据对象
  createSharedData(context, initialData: object) {
    this.dataObject = distributedDataObject.create(context, initialData);

    // 监听数据变化
    this.dataObject.on('change', (sessionId, fields) => {
      console.log('数据变更:', fields);
    });
  }

  // 加入组网
  joinSession(networkId: string) {
    if (this.dataObject) {
      this.dataObject.setSessionId(networkId);
    }
  }

  // 修改数据 (自动同步)
  updateData(key: string, value: any) {
    if (this.dataObject) {
      (this.dataObject as any)[key] = value;
    }
  }
}

1.2 跨设备迁移


import ability from '@ohos.app.ability.abilityPlus';

// 发起跨设备迁移
async function migrateToDevice(targetDeviceId: string) {
  const migrationInfo = {
    targetDeviceId: targetDeviceId,
    migrateAbilityName: 'EntryAbility',
    migrateBundleName: 'com.example.myapp'
  };

  try {
    await ability.migrateAbility(migrationInfo);
    console.log('迁移成功');
  } catch (error) {
    console.error('迁移失败:', error);
  }
}

1.3 分布式任务调度


import distributedScheduler from '@ohos.distributedScheduler';

// 跨设备启动能力
async function startRemoteAbility() {
  const want = {
    bundleName: 'com.example.remoteapp',
    abilityName: 'RemoteAbility'
  };

  try {
    await distributedScheduler.startRemoteAbility(want);
    console.log('远程能力启动成功');
  } catch (error) {
    console.error('启动失败:', error);
  }
}

---

2. 权限管理

2.1 声明权限


// module.json5
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:internet_permission_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.GET_LOCATION",
        "reason": "$string:location_permission_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}

2.2 动态申请权限


import abilityAccessCtrl from '@ohos.app.ability.accessControl';

class PermissionManager {
  // 检查权限
  async checkPermission(permission: string): Promise {
    const atManager = abilityAccessCtrl.createAtManager();
    const status = await atManager.verifyAccessToken(
      getContext(this).applicationInfo.accessTokenId,
      permission
    );
    return status === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;
  }

  // 申请权限
  async requestPermission(permissions: string[]): Promise {
    const atManager = abilityAccessCtrl.createAtManager();
    
    return await atManager.requestPermissionsFromUser(
      getContext(this) as abilityAccessCtrl.UIAbilityContext,
      permissions
    );
  }
}

// 使用示例
const permManager = new PermissionManager();
const hasLocation = await permManager.checkPermission('ohos.permission.GET_LOCATION');

if (!hasLocation) {
  const results = await permManager.requestPermission(['ohos.permission.GET_LOCATION']);
  if (results[0]) {
    console.log('位置权限已授权');
  }
}

---

3. 性能优化

3.1 懒加载 LazyForEach


@State dataList: string[] = [];

// 使用 LazyForEach 实现列表虚拟滚动
LazyForEach(this.dataSource, (item: string) => {
  ListItem() {
    Text(item)
      .padding(10)
  }
}, (item: string) => item)

3.2 图片懒加载


// 使用缓存和占位
Image('https://example.com/large-image.jpg')
  .alt($r('app.media.placeholder'))  // 加载中显示
  .asyncLoad(true)                    // 异步加载

3.3 @Concurrent 装饰器 - 并发编程


import taskpool from '@ohos.taskpool';

// 标记为可并发执行的函数
@Concurrent
function heavyComputation(data: number[]): number {
  // 在后台线程执行耗时计算
  let result = 0;
  for (const num of data) {
    result += Math.sqrt(num) * Math.log(num + 1);
  }
  return result;
}

// 在主线程调用
async function doHeavyTask() {
  const data = Array.from({ length: 10000 }, (_, i) => i);
  
  const task = new taskpool.Task(heavyComputation, data);
  const result = await taskpool.execute(task);
  
  console.log('计算结果:', result);
}

3.4 内存优化


class MemoryManager {
  // 使用完毕后及时释放
  releaseResource(resource) {
    if (resource) {
      resource.release();
      resource = null;
    }
  }

  // 使用 WeakRef 避免内存泄漏
  private cache: Map> = new Map();

  setCache(key: string, value: object) {
    this.cache.set(key, new WeakRef(value));
  }

  getCache(key: string): object | undefined {
    return this.cache.get(key)?.deref();
  }
}

---

4. 常见 API 参考

4.1 定时器与延迟


// setTimeout
setTimeout(() => {
  console.log('延迟执行');
}, 1000);

// setInterval
const timer = setInterval(() => {
  console.log('每秒执行');
}, 1000);

// 清除定时器
clearInterval(timer);

4.2 日志打印


import hilog from '@ohos.hilog';

const domain = 0x0001;
const tag = 'MyApp';

hilog.info(domain, tag, 'Info log: %{public}s', 'message');
hilog.debug(domain, tag, 'Debug log: %{public}s', 'message');
hilog.warn(domain, tag, 'Warn log: %{public}s', 'message');
hilog.error(domain, tag, 'Error log: %{public}s', 'message');

---

📝 学习总结

✅ 已掌握技能

类别内容

|------|------|

**开发基础**DevEco Studio、ArkTS、ArkUI **UI 组件**Text, Button, Image, List, 布局 **状态管理**@State, @Prop, @Link, @Provide **生命周期**Ability 生命周期、页面路由 **数据存储**Preferences, RDB **网络**HTTP, WebSocket **分布式**跨设备数据同步、任务调度 **性能**LazyForEach, @Concurrent, 内存优化

🚀 进阶学习方向

  • **HarmonyOS NEXT** 特有 API
  • **AI 能力集成** (语音、视觉)
  • **ArkUI 3.0** 高级特性
  • **鸿蒙原生应用实战**

---

📚 学习资源汇总

  • 华为开发者官网: https://developer.huawei.com/consumer/cn/
  • HarmonyOS SDK: https://developer.huawei.com/consumer/cn/sdk/
  • OpenHarmony: https://gitee.com/openharmony
  • 鸿蒙开发者社区: https://bbs.csdn.net/forums/harmonyos

---

学习笔记完成!🎉

完成时间: 2026-03-14 02:15

总学习时长: 约 2 小时