2014-02-19 46 views
0

嗨我想知道如何使任務隨着時間的推移而停止。我已經嘗試過Thread.Sleep(),它不起作用。所以基本上這是我的想法,我想每5秒執行一次任務,然後停止重複它。如何定期執行任務?

啓動任務 - 創建活動時。

執行任務

等待5秒鐘

執行任務再次

...

活動關閉

任務不會再執行。

+1

使用處理程序或計時器任務。 – Raghunandan

回答

1

使用的TimerTask如下

Timer t = new Timer(); 
    TimerTask task = new TimerTask() { 
     @Override 
     public void run() { 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      // Do your stuff 

     } 
    }); 


     } 
    }; 
    t.scheduleAtFixedRate(task, 1000, 5000); 

在onDestry

t.cancel() 
+0

我得到錯誤 - 不能創建處理程序內線程沒有正確調用活套 – user3182266

+0

你是否在做任何內部更新任務內運行()? – Sonali8890

+0

如果是,那麼使用handler或runOnUiThread()。 – Sonali8890

0

如果您只想在活動打開時執行任務,最簡單的方法就是使用計時器。有關定時器的說明,請參閱here

+0

我同意這是我使用代碼的最簡單的方法,因爲我使用的代碼是cosmincalistru,但我得到一個錯誤: 無法創建處理程序內部的線程沒有正確調用活套 – user3182266

1

你可以試試這個:

Timer timer = new Timer(); 
TimerTask tt = new TimerTask() { 
    @Override 
    public void run() { 
     yourTaskMethod(); 
    } 
}; 
timer.scheduleAtFixedRate(tt, 0L, 5000L); 

UPDATE:
如果妳打算使用的主要元素,該方法像Toast或別的東西,ü應使用:

public void yourTaskMethod() { 
    //simple elements that don't need main thread 
    int a = b+c; 
    // for elements that use main thread 
    runOnUiThread(new Runnable() { 
     public void run() { 
      Toast... 
     } 
    }); 
} 
+0

無法在未調用Looper.prepare()的線程內創建處理程序 – user3182266

+0

@ user3182266:看我更新的回答 – cosmincalistru

0

你可以Schedule Repeating Alarms

Intent intent = new Intent(this, TestService.class); 
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),5000, pintent); // 5000 means 5 second 

TestService.java

public class TestService extends Service 
{ 
    @Override 
    public void onCreate() 
    { 
       // TODO Auto-generated method stub 

       Toast.makeText(getApplicationContext(), "Service Created", 1).show(); 
      super.onCreate(); 
    } 
} 
0

最終螺紋myTask =新主題( 新的Runnable(){ 公共無效的run(){ 詮釋計數= 0; 而(計數< = 1 ){ //做任何你需要的事 ... count ++; System.sleep(5000); // 5秒 } } } ).start();

0

查看關於Alarm Manager的文檔 - 幫了我很多。

0

使用運行的線程的標準方法,用一個處理程序開始吧...由handler.postDelayed(可運行,5 * 1000).... 調用相同的語句中可運行的運行方法....