如何在一段时间后重复运行一个线程

我想运行一个线程(在后台执行一些耗时的任务并且不更新UI)它只是从Internet上下载一些文件,它独立于UI。

我想在一段时间间隔后重复运行这个线程。

我怎么能这样做,我有类似下面的线程:

boolean mResult =false; void onCreate() { DownloadThread mDownloadThread = new DownloadThread(); mDownloadThread.start(); } class DownloadThread extends Thread implements Runnable { public void run() { // My download code mResult = result; } } 

我需要使用Handler来实现这个吗?

选项1:

 volatile boolean flag = true; public void run() { while(flag) { // Do your task try{ Thread.Sleep(interval); } catch(Exception e){ } } } 

选项2:

 Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // Do your task } }, 0, interval); 

选项3:

 volatile boolean flag = true; public void someMethod(){ // Do your task try{ Thread.Sleep(interval); } catch(Exception e){ } if(flag) return; else someMethod(); } 

选项4:

 final Handler handler = new Handler(); volatile boolean flag = true; Class A implements Runnable{ public void run(){ // Do your Task } if(!flag) handler.postDelayed(a, interval); } A a = new A(); handler.postDelayed(a); 

还有更多选择。 我从未尝试过选项3和4.它只是出现在我的脑海里并且我写了。 如果我是你,我会使用1或2中的任何一个。

首选是

 java.util.concurrent.ScheduledExecutorService 

更新更强大的实现,更多这里ScheduledExecutorService

我会用Timer来实现这个目的。 尝试这个:

 void onCreate() { Timer t = new Timer(); t.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // Download your stuff } }, 0, 1000); } 

它立即启动,每秒调用run-Method。