鸿蒙 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']
}
动态属性设置
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