Nexus OneタブレットのAndroidでメモリの問題が発生し、洞察を期待していました。
私は64intの配列で表されるボードゲームを作っています。アクティビティの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が402Kを解放し、7%が7500K / 8052Kを解放しました...」などのメッセージがスパムで送信されていることに気付きました。これは、配列が4 * 64 *64/1024=しか使用しないため意味がありません。せいぜい16KBのメモリ?