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 2020-12-11 14:30:46 +08:00 via iPhone
sqllite 的活呀
|
2
misaka19000 2020-12-11 14:33:45 +08:00
加内存
|
3
xuanbg 2020-12-11 14:36:34 +08:00
显然是放数据库里面呀
|
4
QBugHunter OP @340244120w
但怎么把数据存放到数据库里呢?这些数据以后可能会更改,另外我们的 APP 不会通过应用市场安卓,是我们给用户一个 APK 文件直接安装。 这样每次升级的时候,我都要通过 10 万行代码把这些数据存到数据库里 |
5
GPLer 2020-12-11 14:38:23 +08:00 via Android
配置文件到数据库 √
配置文件到代码 × |
6
longaiwp 2020-12-11 14:39:17 +08:00
首先代码的行数是有限度的,你那么多的代码在一个方法里,就算内存够,最后大概率也编译不过去。
|
7
Elroooo0Y 2020-12-11 14:40:26 +08:00
放在代码里面不合适 ,读文件 OR 读 DB .
AS 报的内存不足不是运行时. |
8
optional 2020-12-11 14:41:33 +08:00 via Android
不用数据库 csv 不行吗
|
9
QBugHunter OP @GPLer
如何把这些数据写进数据库里? |
10
taogen 2020-12-11 14:43:32 +08:00
直接读文件流不行吗
|
11
zjsxwc 2020-12-11 14:44:42 +08:00
不建议 IDE 来编辑这种超大文件超多行数的源代码文件,
建议写个循环来代替读写硬编码 ``` for(id, code in file) { deviceId.add(id); deviceCode.add(code); } ``` |
12
QBugHunter OP |
13
debuggerx 2020-12-11 14:55:14 +08:00
不是生成 sql 代码 而是直接代码(比如 py )把数据写成 sqlite 的 db 文件,然后用户 app 更新的时候下发完整 db 的 zip 档案。如果担心下发数据量太大,可以根据版本号做 diff patch,只下发差异包和之前的 db 文件合并成最新的配置。
管理方法有两种,要么是每次都用 py 生成最新的 db,然后做 diff ; 或者用 sqlite studio 这样的工具编辑 db 再保存 |
14
Still4 2020-12-11 14:58:01 +08:00
数据放配置文件,代码实现读取,你不觉得一堆静态配置放代码里面很傻吗
|
15
debuggerx 2020-12-11 15:01:16 +08:00
@QBugHunter 常规做法是 db 文件或者 zip 档放在 assets 里,然后 app 启动时检查缓存目录,不存在文件时从 assets 中取出资源释放到缓存目录中,程序中用缓存目录中的 db 文件路径加载数据库,更新逻辑类似
|
16
USAA 2020-12-11 15:10:31 +08:00
写成*.properties,然后读文件就完了。
|
17
GPLer 2020-12-11 15:16:16 +08:00
@QBugHunter APK 里放配置文件,程序读取配置文件,如果不好读 python 输出成 json 或 xml 不就完事了。
|
18
yeqizhang 2020-12-11 15:33:29 +08:00
还不如写到 sqlite 里边呢,然后读取到内存中,properties 文件本质上和数据库也没啥差别。用数据库还方便修改删除..
|
19
zjsxwc 2020-12-11 16:24:12 +08:00
@QBugHunter #12
apk 打包放资源文件夹下面就行 |
20
fengpan567 2020-12-11 17:17:11 +08:00
一个类最多 65535 行
|
21
fengpan567 2020-12-11 17:23:48 +08:00
特地查了一下,每个方法最多 65535 字节,别的没限制了
|
22
2kCS5c0b0ITXE5k2 2020-12-11 23:04:28 +08:00
SQLite 不挺好的吗
|