应用需要长时间运行,但是经过监控和排查,5+app或者是uni-app都存在内存会根据运行时间缓慢增加。如果长时间运行,内存一直增加,则会导致应用闪退。故使用plus.runtime.restart()进行重启,但是经过测试发现,重启之后,监控内存发现,内存并没有回收减少,还是重启之时的内存占用,或者还会高一点。后面我想是不是因为我打开了新的webview,导致webview没清理导致的内存不释放,后面又再执行重启之前,将除主webview的其余webview全部调用clear和close后再执行重启,结果内存占用依然很高。(重启前内存占用300M,plus.runtime.restart()重启之后内存还是占用300M,使用手动退出应用之后再重新启动内存占用只有20M)
请问plus.runtime.restart()这个重启是只是应用内刷新了页面么?没有正在的退出再重启?还是说我调用的方式不对。
- 发布:2023-06-06 08:42
- 更新:2024-08-15 19:48
- 阅读:847
Android 设备上,plus.runtime.restart()重启后,内存没有被释放
我也遇到了类似的问题,我使用wgt实现热更新。plus.install('xxxx.wgt') 之后 Plus.restart(), 在andorid环境下进入首页时uni.getStorageAsync('token')仍然有值,在IOS下token获取为空,会自动跳转到登录页面。这个方法的原始初衷是希望保留内存数据还是不保留呢?或者有什么办法可以选择性保留数据,我是希望在Android和IOS下都能保存token,这样升级完了之后就不用再次让用户登录了
-
回复 5***@qq.com: 没有解决,想到了一个其他的迂回方法。在安装之前往手机磁盘上写日志,在软件重启后,判断日志里的标识符,进行相关操作。
2024-09-10 08:50
-
1***@qq.com (作者)
如果是长期的数据,可以像上面说的用文件存储或者sqlite。因为storage是在浏览器缓存中,虽然官方说uni的storage是没有大小显示并且长期存储,但经过测试,部分设备会存在值丢失的情况。还有就是使用apk安装更新的时候,Storage是会完全清空的。一般在做更新之前或者长期保存的数据我都是把数据同步存在设备的文件或者sqlite里面
2024-10-24 09:01
1***@qq.com (作者)
我们的场景可能不一样,我的应用是无人值守,可以定期使用东西重启。目前我是使用android原生实现,有一定效果,对资源占用不大的页面,效果不大。不过对于复杂的页面,效果还是比较好。目前我用这样可以让它加载大一点的报表页面那些一直运行半个月没报没存webview的oom。
2024-10-24 08:56