前回の投稿ですが、独立したクラスにして、他のActivityからでも参照できるようにしたほうがいいかと思いました。こちらの方がより汎用性・可読性の意味で使いやすいのではないでしょうか。
[MainActivity.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /** throttle処理で間引く間隔 */ private static final int THROTTLE_INTERVAL = 60 * 1 * 1000 ; /** throttle処理クラス */ private Throttle throttle; ・ ・ ・ @Override protected void onCreate( final Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_home); // 初期化 throttle = new Throttle(THROTTLE_INTERVAL); } ・ ・ ・ // コード上の任意の場所で { //throttle処理を入れて間引く throttle.setThrottle( new Throttle.ThrottleEventListener() { @Override public void onActuate(){ //実行したい処理 ・ ・ ・ } }); } |
[Throttle.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | /** * Javaでthrottle処理を行う */ public class Throttle { /** * throttle処理用のハンドラ */ private Handler throttleHandler; /** * throttle処理を実行した最後の時間 */ private long throttleLastTimeMillis; /** * 処理を間引く間隔(ミリ秒) */ long throtteleInterval; /** * リスナ */ private ThrottleEventListener throttleEventListener; //-------------------------------------------------------------- // コンストラクタ //-------------------------------------------------------------- public Throttle( long throtteleInterval) { //初期化 throttleHandler = new Handler(); throttleLastTimeMillis = 0 ; //間引く間隔を定義する this .throtteleInterval = throtteleInterval; } //-------------------------------------------------------------- // メソッド //-------------------------------------------------------------- public void setThrottle(ThrottleEventListener throttleEventListener) { //イベントを通知するリスナーセット this .throttleEventListener = throttleEventListener; long currentTimeMillis = System.currentTimeMillis(); // 最後に実行した時間から間引きたい時間経過していたら実行 if ((throttleLastTimeMillis + throtteleInterval) <= currentTimeMillis) { throttleLastTimeMillis = currentTimeMillis; //処理実行 throttleEventListener.onActuate(); } else { //重複して呼び出さないようにキャンセルするのを忘れずに throttleHandler.removeCallbacks(throttleTask); //間引いた場合は、間隔明けに実行する throttleHandler.postDelayed(throttleTask, (throttleLastTimeMillis + throtteleInterval) - currentTimeMillis); } } //-------------------------------------------------------------- // タスク //-------------------------------------------------------------- private final Runnable throttleTask = new Runnable() { @Override public void run() { throttleHandler.removeCallbacks(throttleTask); throttleLastTimeMillis = System.currentTimeMillis(); //処理実行 throttleEventListener.onActuate(); } }; //-------------------------------------------------------------- // イベントリスナ //-------------------------------------------------------------- public interface ThrottleEventListener { /** * 通知 */ void onActuate(); } } |
独立したクラスでほとんどの処理が完結しているので、Activity側では実質、間引き時間だけを管理すれば良いという状態になり非常に楽です。
当たり前ですが、Throttleクラスをnewするのは1回だけ(onCreate内でだけ)にしてくださいね。じゃないと、newした分だけタスクが走ることになり、処理が重複してしまいます。
Duke de Montosier
(palimpsests). In the XIII-XV centuries in
manuscripts underwent in the Middle
manuscripts underwent in the Middle
manuscripts attributed to Robins
At the same time, many antique
manuscripts significantly
term manuscript (late lat.manuscriptum,
then only a few have reached us
antiquities. These are the Egyptian papyri
or their samples written
The most common form
Century to a kind of destruction:
55 thousand Greek, 30 thousand Armenian
Since the era of Charlemagne
Western Europe also formed
among them acquired “Moral
(palimpsests). In the XIII-XV centuries in