Java 如何在一段时间间隔后重复运行线程
我想运行一个线程(它在后台执行一些耗时的任务,不更新UI),它只是从internet下载一些文件,并且独立于UI 我想在一段时间间隔后重复运行此线程 我如何才能做到这一点,我有如下线索:Java 如何在一段时间间隔后重复运行线程,java,android,multithreading,scheduler,Java,Android,Multithreading,Scheduler,我想运行一个线程(它在后台执行一些耗时的任务,不更新UI),它只是从internet下载一些文件,并且独立于UI 我想在一段时间间隔后重复运行此线程 我如何才能做到这一点,我有如下线索: boolean mResult =false; void onCreate() { DownloadThread mDownloadThread = new DownloadThread(); mDownloadThread.start(); } class DownloadThread e
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;
}
}
我是否需要使用处理程序来实现这一点?我将使用一个来实现这一点。试试这个:
void onCreate()
{
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Download your stuff
}
}, 0, 1000);
}
它立即启动,每秒调用一次run方法。首选选项是
java.util.concurrent.ScheduledExecutorService
更新和健壮的实现,更多信息参见选项1:
volatile boolean flag = true;
public void run()
{
while(flag)
{
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
}
}
volatile boolean flag = true;
public void someMethod(){
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
if(flag)
return;
else
someMethod();
}
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);
选项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 run()
{
while(flag)
{
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
}
}
volatile boolean flag = true;
public void someMethod(){
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
if(flag)
return;
else
someMethod();
}
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);
选项4:
volatile boolean flag = true;
public void run()
{
while(flag)
{
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
}
}
volatile boolean flag = true;
public void someMethod(){
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
if(flag)
return;
else
someMethod();
}
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中的任何一个。到目前为止最好的回答,这应该是可以接受的答案;)它挂起用户界面