我总是建议使用
Handler。
它比内置类要花更多的工作,但是我发现它的效率要高得多,您可以更好地控制它。
Handler是一个类,它将在特定的
Looper/
Thread默认情况下(在其创建的Thread上)处理代码执行,否则,您可以通过将传递
Looper给
Handler构造函数来指定Handler在何处执行其代码,例如-
newHandler(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; } } }}显然,这 不是 一个完整的实现,但它应该为您提供一个良好的开端。



