uni-app编译的安卓app,从别的页面长时间待着再返回首页会白屏,再点击下面的首页会正常显示

发布于 1周前 作者 itying888 来自 Uni-App

uni-app编译的安卓app,从别的页面长时间待着再返回首页会白屏,再点击下面的首页会正常显示

报错信息

16:32:03.124 [JS Framework] Failed to execute the callback function:
TypeError: Cannot read property ‘preload’ of null
16:32:03.124 reportJSException >>>>> exception function:WEEX_CALL_JAVASCRIPT, exception:JavaScript execute error!Uncaught TypeError: Cannot read property ‘preload’ of null
at Pu (uni-jsframework.js:1:155557)
at (uni-jsframework.js:1:197543)
at (uni-jsframework.js:1:575530)
at CallbackManager.consume (uni-jsframework.js:1:1414)
at TaskCenter.callback (uni-jsframework.js:1:24801)
at callback (uni-jsframework.js:1:23987)
at (uni-jsframework.js:1:24437)
at receiveTasks (uni-jsframework.js:1:24373)

这是报错信息,是哪块的配置有问题,一直没研究明白


2 回复

页面特殊吗,使用空白工程是否正常,vue 页面是否正常?


针对你提到的uni-app编译的安卓应用在长时间停留在其他页面后返回首页出现白屏的问题,这通常可能是由于页面状态丢失或组件未正确渲染导致的。以下是一个可能的解决方案,涉及页面生命周期管理和页面状态恢复。我们将通过代码示例展示如何在页面切换时保持和恢复页面状态。

1. 使用页面生命周期函数

在uni-app中,可以利用页面的生命周期函数来管理页面的状态。特别是onShowonLoad函数,它们分别在页面显示和加载时被调用。

示例代码:

假设你的首页是index.vue,你可以在这个页面的脚本部分添加如下代码:

<template>
  <view>
    <!-- 页面内容 -->
    <text>{{ message }}</text>
  </view>
</template>

<script>
export default {
  data() {
    return {
      message: '欢迎来到首页'
    };
  },
  onLoad() {
    // 页面加载时,可以执行一些初始化操作
    console.log('页面加载');
  },
  onShow() {
    // 页面显示时,恢复页面状态或重新获取数据
    console.log('页面显示');
    this.restoreState();
  },
  methods: {
    restoreState() {
      // 这里可以添加恢复状态的逻辑,比如从本地存储读取数据
      // 示例:从本地存储恢复 message
      const savedMessage = uni.getStorageSync('savedMessage');
      if (savedMessage) {
        this.message = savedMessage;
      }
    },
    saveState() {
      // 在页面隐藏或离开前保存状态
      uni.setStorageSync('savedMessage', this.message);
    }
  },
  onHide() {
    // 页面隐藏时,保存当前状态
    console.log('页面隐藏');
    this.saveState();
  }
};
</script>

2. 注意事项

  • 确保在onHide方法中保存了所有需要恢复的状态。
  • onShow方法中,根据保存的状态恢复页面内容。
  • 如果页面数据依赖于网络请求,确保在onShow中正确处理异步数据加载,避免白屏。
  • 考虑使用条件渲染或加载指示器来优化用户体验,直到数据完全加载。

通过上述方法,可以有效减少因长时间停留后返回首页导致的白屏问题。如果问题依旧存在,可能需要进一步检查是否有内存泄漏或其他性能瓶颈问题。

回到顶部