投稿

ラベル(定期処理ハンドラ)が付いた投稿を表示しています

定期処理ハンドラ

サンプルの「Snake」を題材として、アプリ作成の基本をまとめるシリーズです。 第二回目は「定期処理ハンドラ」です。 定期処理ハンドラとは、Handlerクラスを利用して、一定の間隔で処理を行わせる仕組みのことです。 例えば、場面場面でキャラクターの出現数の違いによって、処理の重さが異なる場合があります。 処理の重さの違いでキャラクターの動きにムラは出したくありません。 また、端末の処理能力の違いでキャラクターの動く速度が変わってしまうことも避けたいです。 その解決方法の一つとして、定期処理ハンドラの仕組みがあります。 「Snake」では、以下のように定期処理ハンドラを使用しています。 【SnakeView.java】 class RefreshHandler extends Handler { @Override public void handleMessage(Message msg) { SnakeView.this.update(); SnakeView.this.invalidate(); } public void sleep(long delayMillis) { this.removeMessages(0); sendMessageDelayed(obtainMessage(0), delayMillis); } }; public void update() { if (mMode == RUNNING) { long now = System.currentTimeMillis(); if (now - mLastMove > mMoveDelay) { clearTiles(); updateWalls(); updateSnake(); updateApples(); mLastMove = now; } mRedrawHandler.sleep(mMoveDelay); } } sendMessageDelayedメソッドによって、指定時間(delayMillis)後にMessageオブジェクトを送信しています。 Messageオブジェクトは、handleMessageオブジェクトで受信されます。 handleMessageオブジェ...