2007/03/04開始。ソフトウェア管理やDelerer SEの作者であるおにぎりくんの試行錯誤の記録です。
- [Vue.js]時計?タイムコードを表示するWebアプリ
- (2021/11/16)
- ポエム
- (2020/09/30)
- メトロノームアプリをリリース
- (2017/04/22)
- Sikulix勉強中:便利関数
- (2017/02/25)
- [JavaFX]学習メモ
- (2016/09/22)
指定された時間後に処理を行うには、Handler#sendMessageDelayedを利用できます。
Handler#sendMessageDelayed
http://developer.android.com/reference/android/os/Handler.html#sendMessageDelayed%28android.os.Message,%20long%29
時間はミリ秒で指定できます。
handler.sendMessageDelayed(handler.obtainMessage(what, arg1, arg2), timeout);
みたいな使い方ができるのかな。
リファレンスを見ると、タイムアウトや定期的処理(タイマー)などの時間ベースの処理を実装するのに使えるとあります。メッセージループを使うため精度は高くないかもしれませんが、ハンドラにはそれに変わるいいところがあります。
ハンドラのいいところは、ハンドラを生成したスレッド(メッセージキューを持っている必要あり)で処理が行われることです。Handler#handleMessage()をオーバーライドして処理を記述するなら、そこでの処理はハンドラを生成したスレッドで実施されます。別のスレッドを立ち上げたくない、メインスレッドで画面描画させたいときに活躍します。
たとえばスレッドの処理時間を制限するハンドラを作るとしたら・・・?
Handler#sendMessageDelayed
http://developer.android.com/reference/android/os/Handler.html#sendMessageDelayed%28android.os.Message,%20long%29
時間はミリ秒で指定できます。
handler.sendMessageDelayed(handler.obtainMessage(what, arg1, arg2), timeout);
みたいな使い方ができるのかな。
リファレンスを見ると、タイムアウトや定期的処理(タイマー)などの時間ベースの処理を実装するのに使えるとあります。メッセージループを使うため精度は高くないかもしれませんが、ハンドラにはそれに変わるいいところがあります。
ハンドラのいいところは、ハンドラを生成したスレッド(メッセージキューを持っている必要あり)で処理が行われることです。Handler#handleMessage()をオーバーライドして処理を記述するなら、そこでの処理はハンドラを生成したスレッドで実施されます。別のスレッドを立ち上げたくない、メインスレッドで画面描画させたいときに活躍します。
たとえばスレッドの処理時間を制限するハンドラを作るとしたら・・・?
/** 指定されたスレッドが2秒以上処理していたら、その場で死なすハンドラ */
public class ThreadLimitHandler extends Handler {
/** タイムアウト時間(ミリ秒):値2秒 */
public static final int TIMEOUT = 2000;
/** 監視対象のスレッド */
private Thread thread;
/** コンストラクタ */
public ThreadLimitHandler(Thread th){
this.thread = th;
}
/** メッセージの処理 */
public void handleMessage(Message mes){
// スレッドが生きているか確認
if(thread!=null){
if(thread.isAlive()){
// 生きていれば、死なす。どんな手段を使ってでも。
thread.interupt();
}
}
}
/** 2秒制約つきでスレッドを起動する */
public void startThread(){
if(thread!=null){
thread.start();
this.sendEmptyMessageDelayed(0, TIMEOUT);
}
}
}
#OS再インストールして開発環境未構築のため、動作確認してません。PR
スポンサード・リンク
この記事にコメントする
フリーソフト指向::開発日記 by LapisCactus
