Android携帯ゲームを作って世界に配信してみよう(番外編) ―― Androidアプリのライフサイクル

山田 元康

tag: 組み込み

エレキ系DIY 2011年12月 8日

3)SurfaceViewのsurfaceCreatedメソッドがコールバックされる

 SurfaceViewが生成完了すると,surfaceCreatedがコールバックされます(リストB). surfaceCreatedがコールバックされると,MainクラスのcreateThreadメソッドに処理を委譲します.

 

リストB SurfaceViewの生成とsurfaceCreatedのコールバック(DribbleActivity.javaより抜粋)

class DribbleView extends SurfaceView implements SurfaceHolder.Callback
{
  :
  @Override public void surfaceCreated(SurfaceHolder holder) {
    Log.d("Dribble", "surfaceCreated");
    Main.createThread(this);
  }
  :
}

 

 createThreadメソッドでは,static変数firstを使って,1回目の読み出しか,2回目以降の呼び出しかを判断しています(リストC).そして,1回目の呼び出しのときのみ,音声や画像の読み込みなどの初期化処理を行っています.初期化処理が完了すると,実際のゲーム処理を行うループを実行するスレッドを作成して,スレッドの実行を開始します.

 

リストC MainクラスのcreateThreadメソッド(Main.javaより抜粋)

final class Main
{
  public static void createThread(final SurfaceView view) {
    Main.view = view;
    if (first) {
      :
      first = false;
    }
    thread = new Thread() {
      @Override public void run() {
        Main.runLoop();
      }
    };
    thread.start();
  }
  :
}

 

4) SurfaceViewのsurfaceChangedメソッドがコールバックされる

 画面サイズや回転状態といった表示状態が変更された際に,surfaceChangedメソッドがコールバックされます.実は,ActivityクラスのonCreateメソッドが呼び出されたときには,画面のレイアウトは決まっておらず,その時点では画面や画面上のオブジェクトの位置やサイズを正しく取得することができません.これは,Androidアプリ開発ではまりやすい代表的な問題の一つになっています.画面や画面上のオブジェクトのサイズを正しく取得するには,surfaceChangedメソッドがコールバックされたタイミング以降にサイズを取得する必要があります.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日