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