タイマーを使用してインターバルアプリを作成する予定です。これは最も基本的なものでなければならないので、基本を理解したら、さらに追加する必要があります。私が達成したいのは、間隔を継続する分数を選択することですが、この間隔は何回実行する必要があります。 1分間続く8回の間隔のように。問題は、どのタイマーが最も適しているかです。私はAndroid=カウントダウンタイマーで試してみましたが、うまくいくようですが、もっと良いものはありますか?
常にHandler
を使用することをお勧めします。
組み込みのクラスよりも少し手間がかかりますが、はるかに効率的であり、より細かく制御できます。
ハンドラーは、デフォルトで特定のLooper
/Thread
でのコード実行を処理するクラスであり、作成されたスレッドです。それ以外の場合は、 Looper
をHandler
コンストラクタのように-new Handler(Looper.getMainLooper());
ルーパーをお勧めする理由は、TimerTask
メソッドよりも抽象化が少し低いため、制御の柔軟性が高いためです。
一般に、スレッド間でコードを実行するのに非常に役立ちます。例えば。スレッド間でデータをパイプするのに役立ちます。
主な用途は次の2つです。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final Handler h = new Handler();
h.postDelayed(new Runnable()
{
private long time = 0;
@Override
public void run()
{
// do stuff then
// can call h again after work!
time += 1000;
Log.d("TimerExample", "Going for... " + time);
h.postDelayed(this, 1000);
}
}, 1000); // 1 second delay (takes millis)
}
使い方は簡単!
または、オブジェクトの作成を減らすメッセージを使用できます。 UIの高速更新などを考えている場合-これにより、ガベージコレクターへの圧力が軽減されます。
class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyTimers timer = new MyTimers();
timer.sendEmptyMessage(MyTimers.TIMER_1);
timer.sendEmptyMessage(MyTimers.TIMER_2);
}
public static class MyTimers extends Handler
{
public static final int TIMER_1 = 0;
public static final int TIMER_2 = 1;
@Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
case TIMER_1:
// Do something etc.
Log.d("TimerExample", "Timer 1");
sendEmptyMessageDelayed(TIMER_1, 1000);
break;
case TIMER_2:
// Do another time update etc..
Log.d("TimerExample", "Timer 2");
sendEmptyMessageDelayed(TIMER_2, 1000);
break;
default:
removeMessages(TIMER_1);
removeMessages(TIMER_2);
break;
}
}
}
}
明らかにこれはnotの完全な実装ですが、これは有利なスタートを切るはずです。