我有计划创建一个使用定时器的时间间隔应用。 它应该只是最基本的所以我必须添加一些更多的时候我已经理解了基础。 我想实现的是选择分钟的间隔应持续,但有多少次这样的间隔应该去的数量。 这样的最后1分钟,去8次间隔。 现在的问题是,作为定时器最好用? 我已经试过了我对Android倒数计时器,它似乎工作。 但有另外一个,这是更好?
Answer 1:
我总是建议使用一个Handler
。
它比内置类多一点的工作,但我发现,这是大大更有效率,你必须在它更多的控制。
该处理器是将处理代码执行在一个特定的一类Looper
/ Thread
默认情况下,它创造了线程,否则,您可以指定处理程序通过在经过对其执行代码Looper
的Handler
构造一样- new Handler(Looper.getMainLooper());
我会推荐活套的原因是因为你有控制的更高的灵活性,因为它是在稍低的向下抽象TimerTask
方法。
他们一般是在线程执行的代码是非常有用的。 例如,对于跨线程管道数据非常有用。
两个主要用途是:
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;
}
}
}
}
显然,这不是一个完整的实现,但它应该给你一个良好的开端。
文章来源: Making a interval timer in Java android