我的 Nexus One 平板电脑上的 Android 存在内存问题,我希望能对此有所了解。
我正在制作一个由 64 个整数数组表示的棋盘游戏。当 Activity 的 onPause() 被调用时,它会保存当前的棋盘,以及之前回合的每个棋盘(最多 64 回合)。这大约需要600ms,没问题。当 onResume() 被调用时,是时候加载信息了,完整的撤销历史可能需要 35 秒!
FileInputStream fis = c.openFileInput(filename);
Scanner sc = new Scanner(fis);
int nprev = sc.nextInt(); // Number of previous boards to load
sc.nextLine();
for(int k = 0; k < nprev; k++) {
int[] parr = new int[bsize*bsize];
for(int i = 0; i < bsize; i++) {
for(int j = 0; j < bsize; j++) {
int v = sc.nextInt();
parr[i*bsize+j]=v;
}
sc.nextLine();
}
prevBoards.push(parr);
}
sc.close();
fis.close();
}
bsize=8。所以它只是创建 int[64] 数组,将数字加载到其中,然后将它们推送到堆栈(prevBoards)。它最多可以将 64 个 int[64] 数组压入堆栈。不过,我认为这需要太长时间是不是错了?
我注意到,在加载时,LogCat 会收到诸如“GC_CONCURRENT freed 402K, 7% free 7500K/8052K ...”之类的垃圾邮件,这没有意义,因为数组应该只占用 4*64*64/1024=最多16KB内存?