ハーさんのブログ:Androidのタイマー

BPSは、SFCの学生さんたちと多くのつながりがあり、インターンシップ等も多数受け入れています。

SFCでは近年、ベトナムと交換留学を実施しており、ベトナムからはトップクラスの学生さんが数十人来日しています。
彼らはとても優秀で、一緒に関わっていると学ぶものがたくさんあります。

今回は、留学生のハーさんがBPSのためにブログを書いてくれました!

例えば、Androidで10秒に1回どこかにある写真を読み込んで表示する方法を考えましょう。

二つの方法が考えられます。

1. Javaのタイマー
2. Androidのハンドラー

上の二つの方法の中で、ハンドラーを用いる方法が重要です。
なぜかというと、タイマーはコンパイルできますが、Androidでは別スレッドからのビュー更新がサポートされないため、実行時エラーが発生します。
ハンドラーはメインスレッドで処理が実行されるため、ビュー関係の処理が簡単で、効率の面でも良いようです。

使い方は、次のソースコードのようになります。

private Handler mHandler = new Handler();
private Runnable mUpdateImage;
private int index = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);

	mUpdateImage = new Runnable() {
		public void run() {
			ImageView imView = (ImageView) findViewById(R.id.imgView);
			index++;
			Bitmap bmp = getPhoto(index);
			imView.setImageBitmap(bmp);
			mHandler.removeCallbacks(mUpdateImage);
			mHandler.postDelayed(mUpdateImage, 5000);
		}
	};
	mHandler.postDelayed(mUpdateImage, 100);

最初にRunnableのインスタンスを作成して、それをpostDelayedの引数として渡します。二番目の引数は時間(ミリ秒)です。
Runnableのrunをオバーロードして、ここに処理を実行します。例えば、この関数は5秒で一回写真をアップデートします。

このようにして、Androidでタイマーのような機能を作成することができます。

参考文献
http://developer.android.com/resources/articles/timed-ui-updates.html

ハーさんは新しいものを見つけてきて挑戦するのが得意です。英語力もあるので、情報収集もお手の物みたいです。見習わないといけませんね。

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(16区分17回 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、Ruby Programmer Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。

babaの書いた記事

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ

BPSアドベントカレンダー