Skip to content

鸿蒙 NEXT 开发:一些基础笔记

一个不错的案例仓库

https://gitee.com/harmonyos-cases/cases/tree/master

性能优化指南

https://gitee.com/harmonyos-cases/cases/tree/master/docs/performance

路由的基本使用

ts
import router from "@ohos.router";
  • router.pushUrl() 跳转到指定页面。
  • router.replace() 替换当前页面并销毁。
  • router.back() 返回上一个页面。
  • router.getParams() 获取上一个页面跳转过来携带的参数。
  • router.clear() 清空当前页面栈中所有历史页面,只会保留当前页面作为栈顶页面。
  • router.getLength() 获取当前页面栈中的页面数量。
  • router.getState() 获取当前页面的状态信息。
  • router.showAlertBeforeBackPage() 开启页面返回询问对话框。
  • router.hideAlertBeforeBackPage() 禁用页面返回询问对话框。

参数传递

ts
router.pushUrl({
  //跳转目标页面
  url: "pages/Second",
  //参数
  params: {
    src: "参数数据",
  },
});

获取路由参数

ets
@State src: string = router.getParams()?.['src'];

back() 传参与接收参数

ts
router.back({
  url: "pages/Index",
  params: {
    src: "这是来自home页面的返回数据",
  },
});
ets
//定义一个变量来接收返回的参数,要与返回类型相同
@State src: string = ''

// onPageShow生命周期,当页面每次显示的时候都会调用
onPageShow() {
  // 通过拿到 router.back 中名称为 src 的参数值
  this.src = router.getParams()?.['src']
}

动态属性设置

文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier-0000001774280870

TIP

从 API Version 11 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

ets
class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
  isDark: boolean = false
  applyNormalAttribute(instance: ButtonAttribute): void {
    if (this.isDark) {
      instance.backgroundColor(Color.Black)
    } else {
      instance.backgroundColor(Color.Red)
    }
  }
}

@Entry
@Component
struct attributeDemo {
  @State modifier: MyButtonModifier = new MyButtonModifier()

  build() {
    Row() {
      Column() {
        Button("Button")
          .attributeModifier(this.modifier)
          .onClick(() => {
            this.modifier.isDark = !this.modifier.isDark
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

如何添加权限

找到相应的 module.json5,在 requestPermissions 中添加权限。

下面的例子中添加了 ohos.permission.INTERNET 权限。

json5
{
  module: {
    requestPermissions: [
      {
        name: "ohos.permission.INTERNET",
        usedScene: {
          abilities: ["EntryAbility"],
          when: "inuse",
        },
      },
    ],
  },
}

落盘日志的开启和获取

开启

bat
@echo off

::restart hilog task,  -m option: zlib or none
for /f %%i in ('hdc list targets') do (
    echo target: %%i
	hdc -t %%i shell "param set hilog.loggable.global d"
	hdc -t %%i shell "hilog -w stop"
	hdc -t %%i shell "cd /data/log; find hilog faultlog eventlog bbox -type f | xargs rm -f"
	hdc -t %%i shell "hilog -w start -t kmsg -f 'kmsg'; hilog -w start -f 'hilog' -l  512M -m zib -n 1000"
	hdc -t %%i shell  "cat /dev/null > /data/local/tmp/hdc.log"
	
	hdc -t %%i shell "mount -o remount,rw /"	
	hdc -t %%i shell "sed -i  '/hilog.loggable.global/d' /etc/param/hilog.para"
	hdc -t %%i shell "echo 'hilog.loggable.global=D'  >> /etc/param/hilog.para"
	
	hdc -t %%i shell "hilog -Q pidoff"
)
pause & exit
::hdc -t %%i shell reboot

获取

bat
@echo off
set HILOG_DIR=/data/log/hilog

if %time:~0,2% LEQ 9 (
	set NOW=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%
) else (
	set NOW=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
)

set CWD=%~dp0
set LOG_DIR=%CWD%\LOG\%NOW%

if not exist %LOG_DIR% md %LOG_DIR%
pushd %LOG_DIR%

for /f %%i in ('hdc list targets') do (
	echo %%i
	if not exist %%i md %%i 	
	hdc -t %%i shell "cd /data/log; ps -ef > hilog/ps.log; tar -cf faultlog.tar faultlog eventlog bbox; tar -cf  binder.tar -C%BINDER_DIR% binder"
	hdc -t %%i file recv /data/log/faultlog.tar %%i
	hdc -t %%i file recv /data/log/binder.tar %%i
	hdc -t %%i shell "rm -rf  /data/log/faultlog.tar /data/log/binder.tar"

	for /f %%f in ('hdc -t %%i shell "ls %HILOG_DIR%"') do (
		echo hdc file recv %HILOG_DIR%/%%f %%i/%%f
		hdc -t %%i file recv %HILOG_DIR%/%%f %%i/%%f
 		echo.
	)

	if exist %%i/faultlog.tar (
		tar -xf %%i\faultlog.tar -C %%i
		del %%i\faultlog.tar
	)
)

pause & exit

最后编辑时间:

Version 4.2 (core-1.3.4)