uni-app小程序SDK被后台进程杀掉报错

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

uni-app小程序SDK被后台进程杀掉报错

| 信息类别 | 内容 |
| --- | --- |
| 产品分类 | uni小程序SDK |
| 手机系统 | Android |
| 手机系统版本号 | Android 13 |
| 手机厂商 | 一加 |
| 手机机型 | 一加9R |
| 页面类型 | nvue |
| SDK版本号 | 3.96 |
| App下载地址或H5网址 | [https://car-etc-qny.51etr.com/yxcf/yixingETC_zyyx_1.8.4-2023-11-22%2022-15-12.apk](https://car-etc-qny.51etr.com/yxcf/yixingETC_zyyx_1.8.4-2023-11-22%2022-15-12.apk) |

产品分类:uni小程序SDK  
手机系统:Android  
手机系统版本号:Android 13  
手机厂商:一加  
手机机型:一加9R  
页面类型:nvue  
SDK版本号:3.96  
App下载地址或H5网址:[https://car-etc-qny.51etr.com/yxcf/yixingETC_zyyx_1.8.4-2023-11-22%2022-15-12.apk](https://car-etc-qny.51etr.com/yxcf/yixingETC_zyyx_1.8.4-2023-11-22%2022-15-12.apk)

### 操作步骤:
宿主App打开小程序放在后台被系统回收后重新进入报错  

### 预期结果:
宿主App打开小程序放在后台被系统回收后重新进入App正常运行  

### 实际结果:
宿主App打开小程序放在后台被系统回收后重新进入App报错  

### bug描述:
进程被系统回收重新进入的时候报错  
E/AndroidRuntime: FATAL EXCEPTION: main  
Process: com.zyyx.yixingetc:unimp0, PID: 21344  
java.lang.UnsatisfiedLinkError: No implementation found for void com.taobao.weex.bridge.WXBridge.nativeResetWXBridge(java.lang.Object, java.lang.String) (tried Java_com_taobao_weex_bridge_WXBridge_nativeResetWXBridge and Java_com_taobao_weex_bridge_WXBridge_nativeResetWXBridge__Ljava_lang_Object_2Ljava_lang_String_2)  
at com.taobao.weex.bridge.WXBridge.nativeResetWXBridge(Native Method)  
at com.taobao.weex.bridge.WXBridge.resetWXBridge(WXBridge.java:495)  
at com.taobao.weex.bridge.WXBridgeManager.restart(WXBridgeManager.java:545)  
at com.taobao.weex.WXSDKEngine.restartWeex(WXSDKEngine.java:608)  
at io.dcloud.feature.weex.WeexInstanceMgr.loadWeexToAppid(WeexInstanceMgr.java:312)  
at io.dcloud.feature.sdk.DCUniMPActivity.onCreate(Unknown Source:38)  
at android.app.Activity.performCreate(Activity.java:8422)  
at android.app.Activity.performCreate(Activity.java:8395)  
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1403)  
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3845)  
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4014)  
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:111)  
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2470)  
at android.os.Handler.dispatchMessage(Handler.java:106)  
at android.os.Looper.loopOnce(Looper.java:240)  
at android.os.Looper.loop(Looper.java:351)  
at android.app.ActivityThread.main(ActivityThread.java:8423)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)  

我看到 版本3.7.3.20230223修复了类似bug,但不太确定问题是否为同一个问题  

4 回复

Hi,同学,请问这个问题你解决了吗?我出现了一样的情况。


你解决了吗?同学 同样的问题

你好,请问问题解决了吗?我用的3.9.9 出现了同样的问题

在使用 uni-app 开发小程序时,如果小程序被后台进程杀掉,可能会导致一些异常情况或报错。这种情况通常发生在系统资源紧张时,操作系统为了释放资源,可能会将后台运行的小程序进程终止。以下是一些可能的原因和解决方案:

1. 小程序被系统回收

  • 原因:当小程序进入后台后,如果系统内存不足,可能会将小程序的进程回收,导致小程序再次进入前台时出现异常。
  • 解决方案
    • 优化内存使用:尽量减少小程序的内存占用,避免使用过多的全局变量或缓存数据。
    • 监听生命周期:在 onHideonShow 生命周期函数中处理小程序的隐藏和显示逻辑,确保小程序重新进入前台时能够正确恢复状态。
    • 使用本地存储:将关键数据存储在本地存储(如 uni.setStorageSync)中,以便在小程序被回收后能够恢复数据。

2. 网络请求中断

  • 原因:小程序进入后台后,网络请求可能会被中断,导致请求失败或超时。
  • 解决方案
    • 重试机制:在网络请求失败时,可以尝试重新发起请求。
    • 监听网络状态:使用 uni.onNetworkStatusChange 监听网络状态变化,确保网络恢复后能够重新发起请求。

3. 定时器或长连接中断

  • 原因:小程序进入后台后,定时器或长连接可能会被中断,导致相关功能无法正常工作。
  • 解决方案
    • 使用后台任务:对于需要长时间运行的任务,可以考虑使用小程序的 WorkerBackgroundTask 来执行。
    • 重新初始化:在小程序重新进入前台时,重新初始化定时器或长连接。

4. 页面状态丢失

  • 原因:小程序被回收后,页面状态可能会丢失,导致用户重新进入页面时看到的是初始状态。
  • 解决方案
    • 保存页面状态:在 onHide 生命周期中保存页面状态,在 onShow 中恢复页面状态。
    • 使用全局状态管理:使用 Vuexuni.$emituni.$on 来管理全局状态,确保页面状态在重新进入时能够正确恢复。

5. 报错处理

  • 原因:小程序被回收后,可能会导致某些操作无法正常执行,从而报错。
  • 解决方案
    • 错误捕获:使用 try-catch 捕获可能的异常,避免程序崩溃。
    • 日志记录:将错误信息记录到日志中,方便后续排查问题。

6. 使用 uni-app 提供的 API

  • onHideonShow:监听小程序的隐藏和显示事件,处理相应的逻辑。
  • onError:监听全局错误,捕获未处理的异常。
  • onUnhandledRejection:监听未处理的 Promise 拒绝。

示例代码

// 监听小程序的隐藏和显示
App({
  onHide() {
    // 保存页面状态或执行其他操作
    console.log('小程序进入后台');
  },
  onShow() {
    // 恢复页面状态或执行其他操作
    console.log('小程序进入前台');
  },
  onError(err) {
    // 捕获全局错误
    console.error('捕获到全局错误:', err);
  },
  onUnhandledRejection(err) {
    // 捕获未处理的 Promise 拒绝
    console.error('捕获到未处理的 Promise 拒绝:', err);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!