uni-app 离线打包Demo工程启动速度慢且报错 在后台线程更新UI
uni-app 离线打包Demo工程启动速度慢且报错 在后台线程更新UI
操作步骤
- 配置官方的离线打包SDK工程,然后连上真机运行起来
预期结果
- 正常运行,启动速度正常
实际结果
- 启动速度慢,控制台报错:Main Thread Checker: UI API called on a background thread
bug描述
离线打包SDK 4.15的工程,配置完毕后,成功运行起来了,但是启动的很慢,在Xcode 的控制台中,打出在子线程更新UI的操作。错误log如下:
Main Thread Checker: UI API called on a background thread: -[UIView alpha]
PID: 747, TID: 87780, Thread name: com.taobao.weex.bridge, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 UniPluginDemo 0x0000000105255858 -[PDRCoreAppFrame bulidJSOption] + 444
5 UniPluginDemo 0x000000010563f870 -[PGUI JSWindow_Sync_getOption:] + 152
6 UniPluginDemo 0x000000010563c428 -[PGUI syncExecMethod:] + 320
7 UniPluginDemo 0x000000010526d518 -[PDRCoreFeature Execute:] + 288
8 UniPluginDemo 0x00000001052ef598 -[PDRCoreApp handleCmds:] + 104
9 UniPluginDemo 0x00000001052597cc -[PDRCoreAppFrame webViewEnginde:didReceiveSyncScriptMessage:] + 108
10 UniPluginDemo 0x000000010480d45c -[H5WeexWebview handleMessage:withObject:] + 148
11 UniPluginDemo 0x000000010480c728 28-[H5WeexWebview refreshWeex]_block_invoke + 60
12 UniPluginDemo 0x0000000104839d6c -[WXSDKInstance(DCPlusBridge) execSync:] + 96
13 UniPluginDemo 0x000000010480f8fc -[PlusWeexModule execSync:] + 60
14 CoreFoundation 0x00000001b7008c20 7519E999-1053-3367-B9D5-8844F6D3BDC6 + 1252384
15 CoreFoundation 0x00000001b6ed8d30 7519E999-1053-3367-B9D5-8844F6D3BDC6 + 7472
16 UniPluginDemo 0x0000000104821038 -[WXModuleMethod invoke] + 768
17 UniPluginDemo 0x0000000104798808 42-[WXBridgeContext registerGlobalFunctions]_block_invoke_5.131 + 864
18 UniPluginDemo 0x0000000104862498 43-[WXJSCoreBridge registerCallNativeModule:]_block_invoke + 468
19 CoreFoundation 0x00000001b7008c20 7519E999-1053-3367-B9D5-8844F6D3BDC6 + 1252384
20 CoreFoundation 0x00000001b6ed8d30 7519E999-1053-3367-B9D5-8844F6D3BDC6 + 7472
21 JavaScriptCore 0x00000001c5f74498 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2487448
22 JavaScriptCore 0x00000001c5f73ef8 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2486008
23 JavaScriptCore 0x00000001c5f73924 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2484516
24 JavaScriptCore 0x00000001c5f55d10 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2362640
25 JavaScriptCore 0x00000001c5f53080 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351232
26 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351400
27 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351400
28 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351400
29 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351400
30 JavaScriptCore 0x00000001c5f53080 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351232
31 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351400
32 JavaScriptCore 0x00000001c5f347e8 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2226152
33 JavaScriptCore 0x00000001c6492ea4 C87FA51E-B103-3902-A963-FAAEDB228C86 + 7855780
34 JavaScriptCore 0x00000001c6707a54 C87FA51E-B103-3902-A963-FAAEDB228C86 + 10431060
35 JavaScriptCore 0x00000001c5f559cc C87FA51E-B103-3902-A963-FAAEDB228C86 + 2361804
36 JavaScriptCore 0x00000001c5f5456c C87FA51E-B103-3902-A963-FAAEDB228C86 + 2356588
37 JavaScriptCore 0x00000001c5f53080 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351232
38 JavaScriptCore 0x00000001c5f53080 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351232
39 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 2351400
40 JavaScriptCore 0x00000001c5f53128 C87FA51E-B103-3902-A963-FAAEDB228C86 + 23
更多关于uni-app 离线打包Demo工程启动速度慢且报错 在后台线程更新UI的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
你好!我也遇到同样的问题,请问你解决了吗?
更多关于uni-app 离线打包Demo工程启动速度慢且报错 在后台线程更新UI的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没有,搜了下这个问题几年前就有人提过了,至今官方也没解决,Pandora框架又不是开源的,想自己改都没法改
在 uni-app 的离线打包过程中,如果遇到启动速度慢且报错的问题,尤其是在后台线程更新 UI 时,可能是由于以下几个原因导致的。以下是一些可能的解决方案:
1. 检查主线程与 UI 更新的关系
在 Android 开发中,UI 更新必须在主线程中进行。如果在后台线程中尝试更新 UI,会导致 CalledFromWrongThreadException
异常。确保所有的 UI 更新操作都在主线程中进行。
解决方案:
使用 runOnUiThread
方法将 UI 更新操作切换到主线程。
runOnUiThread(new Runnable() {
@Override
public void run() {
// 更新 UI 的代码
}
});