1

私が取り組んでいる 2D ゲームには、ほとんど目立たない小さな問題があります。正確には 1 秒ごとに、一種の小さなしゃっくり効果が発生しています。オブジェクトが動いているときによく見ると、まるで遅れているかのように一時停止します。

過去 5 時間かけてコードを調べ、反復データを要約し、ガベージ コレクションを防ぐために変数とそうでないものが正しく初期化されていることを確認しましたが、私は比較的新しい Android および Java プログラマーです。

いずれにせよ、コードの一部をブロックして問題の原因になっているかどうかを確認したため、何が原因なのか途方に暮れています。その上に、常に 60 FPS を超えている画面に常に表示される FPS カウンターを追加しました。

これを引き起こす可能性のあるものは他にありますか?よく見ないと気になりません。

このログでは、プロセス ID がすべて同じではないことに注意してください。(別のプロセスが干渉している可能性はありますか?)

04-06 23:35:31.962: DEBUG/KeyguardViewMediator(1082): pokeWakelock(5000)

04-06 23:35:31.962: INFO/power(1082): *** set_screen_state 1

04-06 23:35:31.993: DEBUG/Sensors(1082): using sensors (name=sensors)

04-06 23:35:32.595: DEBUG/SurfaceFlinger(1082): Screen about to return, flinger = 0x120f38

04-06 23:35:33.016: DEBUG/KeyguardViewMediator(1082): pokeWakelock(5000)

04-06 23:35:33.157: DEBUG/KeyguardViewMediator(1082): pokeWakelock(5000)

04-06 23:35:35.696: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 971 objects / 39072 bytes in 50ms

04-06 23:35:36.743: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1350 objects / 53680 bytes in 38ms

04-06 23:35:37.774: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1431 objects / 57032 bytes in 37ms

04-06 23:35:38.813: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1445 objects / 57736 bytes in 37ms

04-06 23:35:39.876: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1457 objects / 58232 bytes in 38ms

04-06 23:35:40.923: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1458 objects / 58424 bytes in 37ms

04-06 23:35:41.977: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1451 objects / 58168 bytes in 37ms

04-06 23:35:43.016: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1446 objects / 58048 bytes in 38ms

04-06 23:35:44.157: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1490 objects / 59648 bytes in 46ms

04-06 23:35:45.032: DEBUG/dalvikvm(1813): GC_EXPLICIT freed 246 objects / 13640 bytes in 1042ms

04-06 23:35:45.282: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1522 objects / 60992 bytes in 37ms

04-06 23:35:46.313: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1456 objects / 58344 bytes in 37ms

04-06 23:35:47.376: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1452 objects / 58192 bytes in 37ms

04-06 23:35:48.454: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1484 objects / 59496 bytes in 37ms

04-06 23:35:49.509: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1440 objects / 57744 bytes in 45ms

04-06 23:35:49.696: DEBUG/dalvikvm(1836): GC_EXPLICIT freed 46 objects / 2208 bytes in 608ms

04-06 23:35:54.141: DEBUG/dalvikvm(4043): GC_EXPLICIT freed 91 objects / 7984 bytes in 56ms

04-06 23:35:59.180: DEBUG/dalvikvm(4051): GC_EXPLICIT freed 196 objects / 12176 bytes in 92ms

04-06 23:36:09.665: DEBUG/dalvikvm(4000): GC_EXPLICIT freed 37 objects / 2000 bytes in 65ms

04-06 23:36:14.790: DEBUG/dalvikvm(3976): GC_EXPLICIT freed 487 objects / 29960 bytes in 87ms
4

1 に答える 1

0

TraceViewを使用して、アプリケーションのパフォーマンスをプロファイリングしてみてください。一部のメソッドが呼び出される頻度と、それらにかかる時間を検出するための優れたツールです。アプリでパフォーマンスの問題が発生したときに、これは非常に役立ちました。

また、非 UI クラスが UI クラスにアクセスしようとしているかどうかを調べることをお勧めします。この場合、わずかな遅延でさえ顕著であり、発生している問題はスレッドロックである可能性があります。

これが役に立ったことを願っています!

于 2011-07-27T16:27:02.890 に答える