2013-08-24 161 views
0

如何在一段時間後調用某個函數的延遲,但該線程仍應該運行。有沒有比這更好的方法。安卓時間延遲

new Thread(new Runnable() { 
    public void run(){ 
     try{ Thread.sleep(recordtime); } 
     catch(Exception e){} 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       reset(); 
      } 
     }); 
    } 
}).start(); 
+1

你可以使用一個處理器作爲替代 – Raghunandan

+0

,你可以在這裏找到一個比如http:/ /stackoverflow.com/questions/17955120/timer-timertask-error/17955219#17955219 – Raghunandan

回答

1

運行在UI線程一些代碼,一些延遲後:

Handler h = new Handler(Looper.getMainLooper()); 

    Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      //--code run in Main, UI thread 
     } 
    }; 

    h.postDelayed(r,2000); //-- run after 2 seconds 

處理程序上的目標線程需要Looper。 UI線程已經擁有它,其他線程需要先配置。

其他選項是:

Timer

Timer t = new Timer(); 

    t.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      //--code run in separate thread 
     } 
    },2000); 

而且ScheduledExecutorService

ScheduledExecutorService se = Executors.newSingleThreadScheduledExecutor(); 

    se.schedule(new Runnable() { 
     @Override 
     public void run() { 
      //--code run in separate thread 
     } 
    },2, TimeUnit.SECONDS); 
+0

我還沒有嘗試過,但它是否也在其他線程上工作(不在UI上) – rikkima

+0

@rikimma更新了其他選項。 –