HarmonyOS 鸿蒙Next 当应用切到后台时应用动画被打断
请求大佬解答,为何另一个动画会打断,这里的web动画正常执行:
Web({
src: $rawfile('rpl_in_plan_back_left.html'),
controller: this.controller
})
.height('57%')
.width('80%')
.zIndex(3)
.backgroundColor(Color.Transparent)
.onAppear(() => {
this.webControllerAttached()
})
.alignRules({
bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
end: { anchor: '__container__', align: HorizontalAlign.End },
start: { anchor: '__container__', align: HorizontalAlign.Start },
top: { anchor: '__container__', align: VerticalAlign.Top },
bias: { vertical: 0.712, horizontal: 0.493 }
})
如上是xml动画转的web动画,下面动画会被打断:
private webControllerAttached() {
if (!(this.animationStart)) {
this.animationStart = true
this.startAnimation()
}
}
/*
- アニメーション開始 */
private startAnimation() {
if (!(this.parentViewModel.openDialogCheck())) {
//アニメーションの決定
let it = this.parentViewModel.btReceivedPlnParkInInfo.value
if (it) {
this.viewModel.useAnimation(it.moveDirection)
this.viewModel.animationDirect(it.recommendDirection)
}
// TODO viewModel.animationSet.cancel()
// アニメーションの開始
setTimeout(() => {
this.getUIContext()
.keyframeAnimateTo({ iterations: CarAnimatorConst.MAX_NUM },
this.genKeyframe(this.viewModel.animation!))
})
}
}
genKeyframe(data: Array<CarAnimator.KeyFrame>): Array<KeyframeState> {
return data.map<KeyframeState>((values) => ({
duration: this.currentKeyTime(data, values) * 1000,
event: () => {
this.trX = this.viewModel.animationDir.first * this.dpToPercentWidth(values.position.x)
this.trY = this.viewModel.animationDir.second * this.dpToPercentHeight(values.position.y)
this.rot = this.viewModel.animationDir.third * values.degreeRotationAngle
},
curve: Curve.Linear
} as KeyframeState))
}
currentKeyTime(data: Array<CarAnimator.KeyFrame>, current: CarAnimator.KeyFrame): number {
let time = current.keyTime
if (data.indexOf(current) == 0) {
return time
}
let beforeTime = data[data.indexOf(current) - 1].keyTime
return time - beforeTime
}
dpToPercentWidth(dp: number) {
return dp * CarAnimatorConst.STANDARD_DENSITY * this.percentWidthFactor;
}
dpToPercentHeight(dp: number) {
return dp * CarAnimatorConst.STANDARD_DENSITY * this.percentHeightFactor;
}
why???
更多关于HarmonyOS 鸿蒙Next 当应用切到后台时应用动画被打断的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
很正常啊,都进入后台了,动画自然就不会执行了。你应该在再次进入前台的时候开始动画就行了。
更多关于HarmonyOS 鸿蒙Next 当应用切到后台时应用动画被打断的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个怎么判断呢?
在HarmonyOS鸿蒙Next系统中,当应用切换到后台时,应用动画被打断的问题通常与系统的资源管理策略有关。鸿蒙系统为了提升整体性能和用户体验,会优化后台应用的行为,包括暂停或限制后台动画的播放。
这一机制确保了前台应用能够流畅运行,同时减少了后台应用对系统资源的占用。因此,当应用进入后台时,其动画可能会被系统自动暂停或取消,以释放资源供前台应用使用。
开发者可以通过以下方式处理这一问题:
- 优化动画逻辑:确保动画在后台时不需要持续运行,或者设计成在后台时自动调整为低功耗模式。
- 使用系统API:利用鸿蒙系统提供的API,检测应用状态变化,并在应用进入后台时适当调整动画行为。
- 管理应用生命周期:在应用生命周期的不同阶段,合理管理动画的启动和停止,以减少不必要的资源消耗。
如果开发者需要确保某些动画在后台也能持续运行(尽管这通常不推荐),可能需要深入了解鸿蒙系统的资源管理策略,并考虑与系统策略进行协调。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html