で、ちょっと起動しながら稼動ログを覗いてみると、こんな感じに同じような文字列が流れていくわけです…。
02-02 07:45:11.524: D/dalvikvm(4336): GC_EXTERNAL_ALLOC freed 48K, 51% free 2673K/5379K, external 0K/0K, paused 72ms
02-02 07:45:12.384: D/dalvikvm(4336): GC_EXTERNAL_ALLOC freed 68K, 50% free 2704K/5379K, external 542K/543K, paused 48ms
02-02 07:45:14.824: D/dalvikvm(4336): GC_EXTERNAL_ALLOC freed 302K, 51% free 2749K/5575K, external 980K/981K, paused 53ms
02-02 07:45:17.094: D/dalvikvm(4336): GC_CONCURRENT freed 346K, 52% free 2751K/5639K, external 965K/1009K, paused 7ms+7ms
02-02 07:45:19.434: D/dalvikvm(4336): GC_EXTERNAL_ALLOC freed 366K, 52% free 2752K/5639K, external 1009K/1009K, paused 54ms
02-02 08:02:37.654: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 70K, 50% free 2708K/5379K, external 542K/543K, paused 56ms
02-02 08:02:40.074: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 315K, 51% free 2750K/5575K, external 980K/981K, paused 59ms
02-02 08:02:42.274: D/dalvikvm(4392): GC_CONCURRENT freed 347K, 52% free 2751K/5639K, external 964K/1020K, paused 9ms+9ms
02-02 08:02:44.794: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 371K, 52% free 2752K/5639K, external 1019K/1020K, paused 111ms
02-02 08:02:47.244: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 353K, 52% free 2752K/5639K, external 1019K/1020K, paused 60ms
02-02 08:02:49.714: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 355K, 52% free 2750K/5639K, external 1010K/1011K, paused 56ms
02-02 08:02:52.214: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 357K, 52% free 2750K/5639K, external 1001K/1002K, paused 59ms
02-02 08:02:54.674: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 346K, 52% free 2750K/5639K, external 1001K/1002K, paused 60ms
02-02 08:02:57.154: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 337K, 52% free 2750K/5639K, external 1010K/1011K, paused 59ms
02-02 08:02:59.694: D/dalvikvm(4392): GC_EXTERNAL_ALLOC freed 348K, 52% free 2749K/5639K, external 1001K/1002K, paused 69ms
今回作成しているAndroidアプリケーションはJava製なので、メモリの管理はガベージコレクタに全て任せる形になっています。
ガベージコレクタはメモリが足りなくなった時点で呼び出されるので、唐突なタイミングでアプリケーションを一時的にストップさせてしまいます。
このログを見てみると、だいたい60ミリ秒前後の停止時間が3秒おきに発生してるようです。
おそらく問題は画像の部分にあるはず。
現時点だとゲームキャラクターのインスタンス1つ1つでDXライブラリで言うLoadGraphっぽい事をやっているわけなんですよね。同じ画像が使われているものがあるにも拘らず。
タスク管理クラスにリソース管理クラスを持たせればいいだろうか?
しかしなんだかしっくり来ない感じです。
うーん、どうしたものか。
(追記)
しっくり来ない方法を試したところ、ガベージコレクタの発生が激減したのでまあ良しとします。
というわけで、今回の成果はこちら。
http://www.twitvid.com/ZFMEZ
さっさと終わるので「えっ?」という感じかもしれませんが、とりあえず前回の動画からの(見た目的な)変更点を挙げてみると、
・敵の表示
・弾のヒットエフェクト表示
・敵のやられエフェクト表示
というところです。
あとは敵の行動パターンと発射する弾幕パターンを作ればキャラクターに関するデータ作成は終わりになりますかね。
その後は敵の出現データベースみたいなのを読み込んでステージを表示するようにすれば、ゲームとしての形にはなるんじゃないかと思いますが、はてさて。