
RT,现在有个配置文件,有 5 到 10 万个 String,这些 String 是由服务器生成的,然后我写了一个 py 脚本,把这写数据转换成 java 代码,类似这样
deviceId.add("IKP_110"); deviceCode.add(12); deviceId.add("IKPP_17"); deviceCode.add(52); deviceId.add("IKJCP_1K"); deviceCode.add(165); 这样我在安卓工程里的某个类里建立了 2 个 list,然后把这写代码( 5-10 万行)复制进去,类似这样
private List<String> deviceId = new ArrayList<>(); private List<Integer> deviceCode = new ArrayList<>(); void getDeviceData(){ //把 5-10 万代码复制到这里 } 然后 Android studio 提示我,内存不足。。。。 我向问些这个有没有什么问题,我自己测试,手机添加 10 万个数据只要 0.02 秒,所以我开始以为这个操作不会有什么太大问题。。。。
对于这种情况,假设有 5-10W 组数据作为配置文件(以后可能有修改),有没有别比较好的处理方?有考虑过数据库,但还是避免不了这个问题,我用 py 脚本把这些转换为数据库存储代码,但代码的行数还是 5-10W 行,Android Studio 提示行数过多,内存不足之类的。。
1 340244120w Dec 11, 2020 via iPhone sqllite 的活呀 |
2 misaka19000 Dec 11, 2020 加内存 |
3 xuanbg Dec 11, 2020 显然是放数据库里面呀 |
4 QBugHunter OP @340244120w 但怎么把数据存放到数据库里呢?这些数据以后可能会更改,另外我们的 APP 不会通过应用市场安卓,是我们给用户一个 APK 文件直接安装。 这样每次升级的时候,我都要通过 10 万行代码把这些数据存到数据库里 |
5 GPLer Dec 11, 2020 via Android 配置文件到数据库 √ 配置文件到代码 × |
6 longaiwp Dec 11, 2020 首先代码的行数是有限度的,你那么多的代码在一个方法里,就算内存够,最后大概率也编译不过去。 |
7 Elroooo0Y Dec 11, 2020 放在代码里面不合适 ,读文件 OR 读 DB . AS 报的内存不足不是运行时. |
不用数据库 csv 不行吗 |
9 QBugHunter OP @GPLer 如何把这些数据写进数据库里? |
10 taogen Dec 11, 2020 直接读文件流不行吗 |
11 zjsxwc Dec 11, 2020 不建议 IDE 来编辑这种超大文件超多行数的源代码文件, 建议写个循环来代替读写硬编码 ``` for(id, code in file) { deviceId.add(id); deviceCode.add(code); } ``` |
12 QBugHunter OP |
13 debuggerx Dec 11, 2020 不是生成 sql 代码 而是直接代码(比如 py )把数据写成 sqlite 的 db 文件,然后用户 app 更新的时候下发完整 db 的 zip 档案。如果担心下发数据量太大,可以根据版本号做 diff patch,只下发差异包和之前的 db 文件合并成最新的配置。 管理方法有两种,要么是每次都用 py 生成最新的 db,然后做 diff ; 或者用 sqlite studio 这样的工具编辑 db 再保存 |
14 Still4 Dec 11, 2020 数据放配置文件,代码实现读取,你不觉得一堆静态配置放代码里面很傻吗 |
15 debuggerx Dec 11, 2020 @QBugHunter 常规做法是 db 文件或者 zip 档放在 assets 里,然后 app 启动时检查缓存目录,不存在文件时从 assets 中取出资源释放到缓存目录中,程序中用缓存目录中的 db 文件路径加载数据库,更新逻辑类似 |
16 USAA Dec 11, 2020 写成*.properties,然后读文件就完了。 |
17 GPLer Dec 11, 2020 @QBugHunter APK 里放配置文件,程序读取配置文件,如果不好读 python 输出成 json 或 xml 不就完事了。 |
18 yungo8 Dec 11, 2020 还不如写到 sqlite 里边呢,然后读取到内存中,properties 文件本质上和数据库也没啥差别。用数据库还方便修改删除.. |
19 zjsxwc Dec 11, 2020 @QBugHunter #12 apk 打包放资源文件夹下面就行 |
20 fengpan567 Dec 11, 2020 一个类最多 65535 行 |
21 fengpan567 Dec 11, 2020 特地查了一下,每个方法最多 65535 字节,别的没限制了 |
22 2kCS5c0b0ITXE5k2 Dec 11, 2020 SQLite 不挺好的吗 |