android如何在应用程序运行时保持大型List <string []> </string []>

时间:2012-07-24 09:01:49

标签: android out-of-memory

在我的应用程序运行时保持List<String[]>的最佳方法是什么?我的方法有问题。它大部分时间都给我一个OutOfMemory错误,因为列表太大了。

List<String[]>是解析我在线下载的csv文件的结果。我所做的是在一个活动中解析csv然后将其结果保存在静态类成员中,如:

String url = "http://xxx/pdf/pms/pms_test.csv";
try {
    InputStream input = new URL(url).openStream();
    CSVReader reader = new CSVReader(new InputStreamReader(input));
    SchedController.sched = reader.readAll();
    input.close();
} 

...然后在不同的活动上访问ClassName.sched

我正在这样做,以便解析的数据将在每个活动中可用...而且我不必再次解析。我该怎么做才能改善它?

2 个答案:

答案 0 :(得分:1)

我认为你可以采用两种方法。

  1. 您保存文件并以延迟加载方式解析
  2. 您创建数据库并保存数据。
  3. 我建议你创建一个数据库,这并不难,让你管理好你的数据。您可以轻松地使用光标进行lazyLoading,或使用ORM(ORMLite / Greendao)...我认为这是加载数据的最佳方式和最快速度。

    希望这会对你有所帮助。

答案 1 :(得分:1)

只是为了补充Paresh的评论。 我可以建议我在我的应用程序中使用的类似内容。

例如,我需要显示商店中的商品列表。 (每个项目都有ID,名称和费用)。

为实现此目的,我首先向服务器发出请求以获取项目数,例如 itemCount 。 现在我设置页面中显示的项目数限制为100。 如果 itemCount 大于100,我会显示一条警告,说明只会显示100个项目,并且可以添加下一个button来下载下一组项目。 或者,如果是搜索,您可以要求用户返回并优化搜索。 如果 itemCount 小于100,那么您将不会遇到任何问题

这样可以实现分页以避免OutOfMemory问题