应用程序启动后,我的Java应用程序中的所有.class文件是否都已加载到内存中?

fhu*_*cho 7 java android

我正在为Android制作应用程序,在我的Activity中我需要加载一个大约10000个字符串的数组.从数据库加载它很慢,所以我决定将它直接放入一个.java文件(作为私有字段).我有大约20个这样的类包含字符串数组,我的问题是,我的应用程序启动后是否所有类都加载到内存中?如果是这样,我需要快速加载我需要这些字符串的Activity,但整个应用程序启动会很慢......还有其他方法,如何从文件中快速加载10000字符串数组?

更新: 为什么我需要这些字符串?我的Android应用程序允许您在布拉格的公共交通中找到"旅程" - 您选择出发站,到达站点并找到您的旅程(看看这里).我的应用程序有一个建议功能 - 您输入leter"c"作为您的出发站点,并出现一个建议ListView,其中以"c"开头.对于这些建议,我需要字符串.从数据库中获取建议很慢(G1上大约400ms).

Ste*_*n C 4

首先,400ms 执行一个简单的数据库查询确实很慢。太慢了,我怀疑您的数据库模式(例如索引)或数据库连接配置存在问题。

但是,如果您真的不想使用数据库,那么对于您当前正在做的事情,还有一些替代方案:

  1. 使用 安排包含数组的类根据需要延迟加载Class.forName(...)。如果正确实现,垃圾收集器应该可以在加载类并将字符串添加到主数据结构后回收它们。

  2. 将 10000 个字符串转换为平面文件,将该文件放入应用程序的 JAR 文件中。然后使用Class.getResourceAsStream(...)打开文件并将其读入内存数组。

  3. 如上所述,但使用索引文件并将数组替换为允许您从文件中延迟读取字符串的数据结构。(这会有点复杂,但如果您担心 10000 个字符串消耗的内存,这将有助于解决这个问题。)