android - 使用 Android 加载 1,440,000 大小的 ArrayList 时运行速度极慢

标签 android arraylist

源码如下图

public static ArrayList<Integer> readFile(String fileName) {

String sdPath;
sdPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
ArrayList<Integer> data = new ArrayList<Integer>();

try {

Scanner s = new Scanner(new FileInputStream(new File(sdPath + fileName)));

while( s.hasNext() ) {
data.add( s.nextInt() );
}
}
catch(FileNotFoundException fN) {
fN.printStackTrace();
}
catch(IOException e) {
System.out.println(e);
}

return data;    
}

当我运行此代码时,LogCat 会显示以下消息,其中包含我的 android 中的任何显示更改

.
.
.
04-27 00:12:31.216: D/dalvikvm(17141): GC_CONCURRENT freed 1953K, 23% free 15699K/20295K, paused 2ms+12ms
.
.
.

此外,上面的代码在几秒钟内就可以在我的桌面上完全运行..

请帮助我。

最佳答案

与台式电脑相比,手机的资源非常有限。您不应该期望手机能够以与台式计算机相同的速度完成计算密集型任务...

您正在用尽所有手机的 RAM,试图将这么大的 ArrayList 加载到其中。

一些提示:

  • 将您的 readFile 代码移至后台线程(如果尚不存在)。
  • 考虑一种不同的数据结构,某种 SQL 可能会更有效地处理如此庞大的数据集
  • 考虑一次只加载 ArrayList 的(相对)一小部分。处理您需要的部分,当您需要另一个部分时单独加载它。
  • 考虑将您的数据分解成多个较小的文件,并仅加载当前操作所需的文件。

关于android - 使用 Android 加载 1,440,000 大小的 ArrayList 时运行速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336424/

相关文章:

java - 使用嵌套的 While 语句迭代两个 ArrayList - Java

Java函数设置未知类型的数组列表

java - 返回列表中下一个高温的列表

java - 如何将 arraylist 与数组一起使用?

java - 在构建字符串并将它们添加到 ArrayList 时出错

android - View和SurfaceView,哪个更好?

android - 有没有办法为 2 个具有不同包名称的应用程序提供 1 个 Firebase 数据库?

android - org.gradle.api.ProjectConfigurationException :A problem occurred configuring root project after updated to AndroidStudio - 3. 5.3

android - 当我也可以在没有它的情况下懒洋洋地膨胀 View 时,ViewStub 有什么意义?

javascript - 在Android的WebView中, `DomStorage` 、 `Database` 、 `AppCache` 之间有什么不同?