HarmonyOS鸿蒙Next中单页面模式启用画中画后,切到其他页面画中画卡死

HarmonyOS鸿蒙Next中单页面模式启用画中画后,切到其他页面画中画卡死 单页面模式启用画中画后,切到其他页面画中画卡死

3 回复

我的可以,参考我的代码写

MainIndexPage:
import { ZRouter } from '@hzw/zrouter'

@Entry
@Component
struct MainIndexPage {
  @State backParams: string = '';

  build() {
    Navigation(ZRouter.getNavStack()) {
      Column({ space: 20 }) {
        Text(`backParams=${this.backParams}`).fontSize(16)

        Button('第二个页面').onClick((event: ClickEvent) => {
          ZRouter.push("TwoPage")
        })

        Button('pushForResult 第二个页面').onClick((event: ClickEvent) => {
          ZRouter.pushForResult("TwoPage", {}, (body: PopInfo) => {
            this.backParams = JSON.stringify(body);
          })
        })
      }
    }
    .title('主入口')
    .width('100%')
    .height('100%')
    .id('PageID')
  }
}

import { Route } from '@hzw/zrouter';
import { PiPWindow } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Route({ name: 'VideoTestPage' })
@Component
export struct VideoTestPage {
  private mXComponentController: XComponentController = new XComponentController();

  build() {
    NavDestination() {
      Column() {
        XComponent({
          id: 'VideoTestPageID',
          type: XComponentType.SURFACE,
          controller: this.mXComponentController
        }).width('100%').height(211).onLoad(e => {
          // this.mXComponentController
        })

        Button('画中画').onClick(() => {
          let pipController: PiPWindow.PiPController | undefined = undefined;
          let contentWidth: number = 800; // 假设当前内容宽度800px。
          let contentHeight: number = 600; // 假设当前内容高度600px。
          let config: PiPWindow.PiPConfiguration = {
            context: getContext(this),
            componentController: this.mXComponentController,
            navigationId: 'PageID',
            templateType: PiPWindow.PiPTemplateType.VIDEO_PLAY,
            contentWidth: contentWidth,
            contentHeight: contentHeight,
            controlGroups: [PiPWindow.VideoPlayControlGroup.FAST_FORWARD_BACKWARD],
            // customUIController: nodeController, // 可选,如果需要在画中画显示内容上方展示自定义UI,可设置该参数。
          };

          let promise: Promise<PiPWindow.PiPController> = PiPWindow.create(config);
          promise.then((data: PiPWindow.PiPController) => {
            pipController = data;
            console.info(`Succeeded in creating pip controller. Data:${data}`);
            let promise: Promise<void> = pipController.startPiP();
            promise.then(() => {
              console.info(`Succeeded in starting pip.`);
            }).catch((err: BusinessError) => {
              console.error(`Failed to start pip. Cause:${err.code}, message:${err.message}`);
            });
          }).catch((err: BusinessError) => {
            console.error(`Failed to create pip controller. Cause:${err.code}, message:${err.message}`);
          });
        })
      }
    }
    .title('视频播放')
  }
}

更多关于HarmonyOS鸿蒙Next中单页面模式启用画中画后,切到其他页面画中画卡死的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,单页面模式下启用画中画功能后,切换到其他页面时画中画出现卡死现象,可能是由于以下原因:

  1. 资源管理问题:画中画功能可能未正确处理页面切换时的资源释放和重新分配,导致资源占用异常,进而引发卡死。

  2. 生命周期管理:页面切换时,画中画窗口的生命周期未与页面生命周期同步,可能导致画中画窗口状态异常。

  3. 线程阻塞:画中画功能可能在某些线程中执行耗时操作,页面切换时未及时中断或处理这些操作,导致线程阻塞。

  4. 系统兼容性:鸿蒙Next系统在特定版本或特定设备上可能存在与画中画功能相关的兼容性问题,导致页面切换时卡死。

  5. 内存泄漏:画中画功能在页面切换过程中可能存在内存泄漏问题,导致系统资源耗尽,进而引发卡死。

  6. 事件处理异常:页面切换时,画中画功能可能未正确处理相关事件,如焦点丢失、窗口尺寸变化等,导致状态异常。

  7. 依赖服务异常:画中画功能依赖的系统服务在页面切换时可能出现异常,导致画中画窗口无法正常响应。

  8. 调试日志缺失:画中画功能在页面切换时可能未记录足够的调试日志,导致问题难以定位和复现。

以上是可能导致HarmonyOS鸿蒙Next中单页面模式启用画中画后切换到其他页面时画中画卡死的原因。

在HarmonyOS鸿蒙Next中使用单页面模式时,启用画中画后切换到其他页面导致画中画卡死,可能是由于页面生命周期管理不当或资源未正确释放。建议检查以下方面:

  • 生命周期管理:确保画中画窗口在页面切换时正确调用onPauseonStop,避免资源占用。
  • 资源释放:在页面销毁时,确保释放画中画相关的资源和引用。
  • 异步处理:确保画中画的操作在异步线程中执行,避免阻塞主线程。

调试时可以使用日志或调试工具追踪页面生命周期和资源管理,定位问题所在。

回到顶部