Tech Racho エンジニアの「?」を「!」に。
  • 開発

ハーさんのブログ: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

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


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。