uni-app 小程序一直开启后推到后台,再拉回前台就闪退
uni-app 小程序一直开启后推到后台,再拉回前台就闪退
项目属性 | 值 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.99 |
手机系统 | Android |
手机系统版本号 | Android 14 |
手机厂商 | 小米 |
手机机型 | 小米14pro |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
操作步骤:
复现步骤:小米手机pro安装隆基渠道商APP,登录成功后,将该应用退到手机后台,不杀掉进程,等半天的时间,然后再次点击这个app,会提示闪退的提醒。
预期结果:
不应该闪退。
实际结果:
闪退
bug描述:
问题描述:小米手机pro安装隆基渠道商APP,登录成功后,将该应用退到手机后台,不杀掉进程,等半天的时间,然后再次点击这个app,会提示闪退的提醒。 报错日志如下:
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) - is the library loaded, e.g. System.loadLibrary?
at com.taobao.weex.bridge.WXBridge.nativeResetWXBridge(Native Method)
at com.taobao.weex.bridge.WXBridge.resetWXBridge(WXBridge.java:2)
at com.taobao.weex.bridge.WXBridgeManager.restart(WXBridgeManager.java:4)
at com.taobao.weex.WXSDKEngine.restartWeex(WXSDKEngine.java:2)
at io.dcloud.feature.weex.WeexInstanceMgr.loadWeexToAppid(WeexInstanceMgr.java:7)
at io.dcloud.feature.sdk.DCUniMPActivity.onCreate(Unknown Source:25)
at android.app.Activity.performCreate(Activity.java:8891)
at android.app.Activity.performCreate(Activity.java:8856)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1468)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3953)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4124)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:99)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2572)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:224)
at android.os.Looper.loop(Looper.java:318)
at android.app.ActivityThread.main(ActivityThread.java:8669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
更多关于uni-app 小程序一直开启后推到后台,再拉回前台就闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
HBuilderX 4.16.2024051009-alpha 已修复。
更多关于uni-app 小程序一直开启后推到后台,再拉回前台就闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
为什么这个报错是通过hbuild的升级来更新的
日志追加如下:
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) - is the library loaded, e.g. System.loadLibrary?
解析原始
1
com.taobao.weex.bridge.WXBridge.nativeResetWXBridge(Native Method)
2
com.taobao.weex.bridge.WXBridge.resetWXBridge(WXBridge.java:2)
3
com.taobao.weex.bridge.WXBridgeManager.restart(WXBridgeManager.java:4)
4
com.taobao.weex.WXSDKEngine.restartWeex(WXSDKEngine.java:2)
5
io.dcloud.feature.weex.WeexInstanceMgr.loadWeexToAppid(WeexInstanceMgr.java:7)
6
io.dcloud.feature.sdk.DCUniMPActivity.onCreate(Unknown Source:25)
7
android.app.Activity.performCreate(Activity.java:8891)
8
android.app.Activity.performCreate(Activity.java:8856)
9
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1468)
10
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3965)
11
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4136)
12
android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
13
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
14
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:99)
15
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2581)
16
android.os.Handler.dispatchMessage(Handler.java:106)
17
android.os.Looper.loopOnce(Looper.java:224)
18
android.os.Looper.loop(Looper.java:318)
19
android.app.ActivityThread.main(ActivityThread.java:8720)
20
java.lang.reflect.Method.invoke(Native Method)
21
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
22
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
小程序SDK不支持单进程或与宿主统一进程。有类似需求可以使用APP离线打包SDK
没有解决哦
没有解决咋办呢
回复 2***@qq.com: 不能与宿主同一个进程 目前是你们修改了SDK配置项,导致sdk出现异常,需要恢复原有配置,或使用APP离线打包SDK
回复 DCloud_Android_ST: 这个不能优化吗?都已经用了uni小程序了,还怎么离线打包
回复 DCloud_Android_ST: 意思就是我打开了小程序放在那不动,过一会就提示提示闪退吗,这体验不太好吧,小米手机一直频繁提示用户闪退,人家还以为我们的App有Bug
bug已确认
使用SDK-Android@4.15-20240606 更新后,应用退到后台,等个十几分钟,uni进程DEAD,再点app,uni进程恢复,但此时整个app白屏,提示为app没有响应, 日志报错为:No implementation found for void com.taobao.weex.bridge.WXBridge.nativeResetWXBridge,这是什么情况呢
app切到后台,小程序进程一旦被系统回收(杀掉),重新打开app必定报错,主进程还没被回收。
app切到后台,小程序进程一旦被系统回收(杀掉),重新打开app必定报错,主进程还没被回收。
FATAL EXCEPTION: main (Ask Gemini)
Process: com.yidont.unimp.modules.demo:unimp0, PID: 5795
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) - is the library loaded, e.g. System.loadLibrary?
at com.taobao.weex.bridge.WXBridge.nativeResetWXBridge(Native Method)
at com.taobao.weex.bridge.WXBridge.resetWXBridge(Unknown Source:16)
at com.taobao.weex.bridge.WXBridgeManager.restart(Unknown Source:16)
at com.taobao.weex.WXSDKEngine.restartWeex(Unknown Source:8)
at io.dcloud.feature.weex.WeexInstanceMgr.loadWeexToAppid(Unknown Source:33)
at io.dcloud.feature.sdk.DCUniMPActivity.onCreate(Unknown Source:38)
at android.app.Activity.performCreate(Activity.java:8891)
at android.app.Activity.performCreate(Activity.java:8856)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1471)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3973)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4144)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:99)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:224)
at android.os.Looper.loop(Looper.java:318)
at android.app.ActivityThread.main(ActivityThread.java:8770)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
怎么设置小程序logo图标?,默认是宿主AppLogo,,还有怎么获取到小程序名称和logo
在 uni-app 开发的小程序中,如果遇到小程序从后台拉回前台时闪退的问题,可能是由于以下几种原因导致的。以下是一些可能的解决方案:
1. 内存泄漏
- 问题描述:小程序在后台运行时,如果内存占用过高,当重新回到前台时,可能会因为内存不足而闪退。
- 解决方案:检查代码,确保没有内存泄漏的情况。特别是定时器、事件监听器等资源的清理。
2. 页面生命周期管理不当
- 问题描述:在小程序切换到后台时,页面生命周期管理不当可能导致页面状态丢失或异常。
- 解决方案:确保在
onHide
和onShow
生命周期中正确处理页面状态。例如,在onHide
中保存页面状态,在onShow
中恢复页面状态。
3. 小程序后台运行时间过长
- 问题描述:小程序在后台运行时间过长,可能会导致资源被回收,重新回到前台时闪退。
- 解决方案:尽量减少小程序在后台的运行时间,确保在
onHide
中释放不必要的资源。
4. 小程序版本问题
- 问题描述:可能是小程序基础库版本问题,或者 uni-app 框架本身的 bug。
- 解决方案:确保使用最新版本的 uni-app 和小程序基础库。可以在
manifest.json
中指定基础库的最低版本。
5. 网络请求未处理
- 问题描述:如果小程序在后台时还有未完成的网络请求,可能会导致重新回到前台时闪退。
- 解决方案:在
onHide
中取消未完成的网络请求。
6. 小程序缓存问题
- 问题描述:小程序缓存可能导致数据不一致或异常,从而导致闪退。
- 解决方案:清理小程序缓存,或者在代码中合理处理缓存数据。
7. 调试工具问题
- 问题描述:有时候调试工具本身的问题可能导致闪退。
- 解决方案:尝试在不同的设备或不同的调试工具中复现问题。
8. 代码逻辑问题
- 问题描述:某些代码逻辑可能在特定情况下导致闪退。
- 解决方案:仔细检查代码,特别是与页面生命周期相关的逻辑。
9. 使用 wx.getBackgroundAudioManager
或 wx.getBackgroundFetchData
- 问题描述:如果使用了这些 API,可能会导致小程序在后台运行时出现问题。
- 解决方案:确保正确使用这些 API,并在
onHide
中正确处理这些资源。
10. 检查日志
- 问题描述:闪退问题可能通过日志信息找到原因。
- 解决方案:在开发工具中查看日志,或者在代码中加入
try-catch
捕获异常。
示例代码
export default {
onShow() {
// 恢复页面状态
this.restoreState();
},
onHide() {
// 保存页面状态
this.saveState();
// 取消未完成的网络请求
this.cancelRequests();
},
methods: {
restoreState() {
// 恢复页面状态
},
saveState() {
// 保存页面状态
},
cancelRequests() {
// 取消未完成的网络请求
}
}
}