apache / incubator-weex

Apache Weex (Incubating)
https://weex.apache.org
Apache License 2.0
13.75k stars 1.82k forks source link

android weex加载远程js 有些手机oom #2488

Closed lhjandroid closed 5 years ago

lhjandroid commented 5 years ago

Caused by: java.lang.OutOfMemoryError: Failed to allocate a 620105384 byte allocation with 6291456 free bytes and 509MB until OOM, max allowed footprint 8818312, growth limit 536870912 at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:69) at java.lang.StringBuilder.<init>(StringBuilder.java:102) at com.taobao.weex.utils.WXFileUtils.readStreamToString(WXFileUtils.java:90) at com.taobao.weex.utils.WXFileUtils.loadFileOrAsset(WXFileUtils.java:56) at com.taobao.weex.WXSDKInstance.renderByUrlInternal(WXSDKInstance.java:737) at com.taobao.weex.WXSDKInstance.renderByUrl(WXSDKInstance.java:816) at .WXPageActivity.n(WXPageActivity.java:123) at .WXPageActivity.j(WXPageActivity.java:75) at .WXPageActivity.onCreate(Unknown Source:20)

weex版本 'com.taobao.android:weex_sdk:0.20.0.2'

是由于下载的js过大导致的?android端只负责渲染 weex页面由前端同学开的.

zshshr commented 5 years ago

这个问题不好解决,跟运行时环境有关系,js bundle的大小需要限制,不能无限大,建议每个js bundle 不能大于250k

fengqingyun2008 commented 4 years ago

+1,我这也报相同的问题,我觉得限制js的大小,不是解决问题的办法,js逻辑稍微复杂点,就会超过250K

HARDWARE=bigfish RADIO=HiSTBAndroidV600R003C01SPC032 versionCode=148 HOST=ubuntu12 TAGS=dev-keys ID=S-Box8L44C MANUFACTURER=Hisilicon TYPE=eng TIME=1568000712000 FINGERPRINT=HiSTBAndroidV5/Hi3798MV300/Hi3798MV300:4.4.2/S-Box8L44C/8171090000010:eng/test-keys UNKNOWN=unknown BOARD=Hi3798MV300 PRODUCT=Hi3798MV300 code=CI4OOB versionName=4.4.8 DISPLAY=S-Box8L44C test-keys USER=jiangxiaohe DEVICE=Hi3798MV300 MODEL=S-Box8L44C BOOTLOADER=unknown CPU_ABI=armeabi-v7a CPU_ABI2=armeabi IS_DEBUGGABLE=true devicesId=9268508678b1199b SERIAL=003201FF0001007006BB60D21C6B1054 releaseTime=2019.11.15-101614 BRAND=HiSTBAndroidV6 java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) at com.taobao.weex.adapter.DefaultWXHttpAdapter.readInputStreamAsBytes(DefaultWXHttpAdapter.java:179) at com.taobao.weex.adapter.DefaultWXHttpAdapter.access$200(DefaultWXHttpAdapter.java:45) at com.taobao.weex.adapter.DefaultWXHttpAdapter$1.run(DefaultWXHttpAdapter.java:88) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)

YorkShen commented 4 years ago

@fengqingyun2008 The DefaultWXHttpAdapter is for demo purpose, use it at your own risk. You can inject your own http adapter to solve the problem.