Android 中比 Timer 更好方法 – jincf2011的专栏 – 博客频道 – CSDN.NET

timer的重点在于两个重载,

timer.schedule(task,5000) 是表示5秒后执行且只执行一次的任务。

timer.schedule(task,1000,5000)表示 1 秒钟后执行,然后每隔 5 秒钟为周期进行 重复执行。

但是本人亲测,无论如何也没有让timer运行起来。换了handler.postDelayed这种方式,简洁好用强大自由。这种方式的重点在于触发周期性重复执行需要回调,结束回调需要写出正确的逻辑。

Android中的Timer一般像下面这样写

 

Timer timer = new Timer( );

TimerTask task = new TimerTask( ) {

public void run ( ) {

Message message = new Message( );

message.what = 1;

handler.sendMessage(message);

}

};

final Handler handler = new Handler( ) {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

log.e(“Timer“,”Timer“);

update( );

break;

}

super.handleMessage(msg);

}

};

protected void onDestroy ( ) {

if (timer != null) {

timer.cancel( );

timer = null;

}

super.onDestroy( );

}

protected void onCreate (Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.setContentView(R.layout.main);

timer.schedule(task,1000,5000);

}

最重要的一点是 timer.schedule(task,1000,5000),如果设置为 timer.schedule(task,5000)是不会工作的。

因为timer.schedule(task,5000) 是表示执行一次的任务。

timer.schedule(task,1000,5000)表示 1 秒钟后开始 5 秒钟为周期 重复执行,

 

————————————————————————————————————————————————————————

更好的方法是通过下面的代码            (Handler加Runnable线程,更简洁)


private Handler handler = new Handler( );

private Runnable runnable = new Runnable( ) {

public void run ( ) {

update( );

handler.postDelayed(this,1000);     //postDelayed(this,1000)方法安排一个Runnable对象到主线程队列

}

};

handler.postDelayed(runnable,1000);         // 开始Timer

handler.removeCallbacks(runnable);           //停止Timer

来源URL:http://cache.baiducontent.com/c?m=9d78d513d9901df918b0cf281a16a620420bd7232890904b708ed50ed1735a325a7bb3e57a770704a4943d315db8492bb6a7706f6f587ce6cfc88a49dea6c16869d3766a2701d016548042f18a5b21c5229151eaab&p=8b2a971f86cc41ac5e81822942498f&newp=8b2a971d86cc41ac5eaaf8395f49cd231610db2151d4db1e27&user=baidu&fm=sc&query=android+timer&qid=a19a11ef00073054&p1=2