在Android UI線程中執行定時任務的方法,androidui線程執行
在項目中,我們經常會碰見執行定時任務的情況,比如下面這個情境:在2秒內連續點擊兩次返回鍵,應用就退出。這個功能實現的思路大體這樣:定義一個類變數goback,記錄點擊的次數,如果2秒內點擊了2次就finish,如果沒有,goback就被重設為0,其中一種實現方法如下(1.0):
<span style="white-space:pre"></span>new Handler().postDelayed(new Runnable() {@Overridepublic void run() {goback = 0;}}, 2000);接下來,我再探討一下其他實現上面功能的方法:
1.1使用 ScheduledExecutorService
private static final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor(); Runnable task = new Runnable() { public void run() { /* Do something… */ } worker.schedule(task, 2, TimeUnit.SECONDS);
1.2 使用Timer類
new Timer().schedule(new TimerTask() { @Override public void run() { // this code will be executed after 2 seconds }}, 2000);
1.3還是使用handler,不過增加了message的發送
Handler myHandler = new DoSomething();Message m = new Message();m.obj = c;//passing a parameter heremyHandler.sendMessageDelayed(m, 1000);class DoSomething extends Handler { @Override public void handleMessage(Message msg) { MyObject o = (MyObject) msg.obj; //do something here } }
1.4最後一種使用Thread類,有點繁瑣,不建議用
private static long SLEEP_TIME = 2 // for 2 second..MyLauncher launcher = new MyLauncher(); launcher.start();..private class MyLauncher extends Thread { @Override /** * Sleep for 2 seconds as you can also change SLEEP_TIME 2 to any. */ public void run() { try { // Sleeping Thread.sleep(SLEEP_TIME * 1000); } catch (Exception e) { Log.e(TAG, e.getMessage()); } //do something you want to do //And your code will be executed after 2 second } }
差不多就是以上五種做法,各有各的適用情境,代碼比較簡單,不多說,直接拿過去用就行。