Use*_*337 5 java multithreading android scheduler
我想运行一个线程(它在后台执行一些耗时的任务并且不更新UI)它只是从互联网上下载一些文件而且它独立于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;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要用它Handler来实现吗?
sti*_*ike 22
选项1:
volatile boolean flag = true;
public void run()
{
while(flag)
{
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
}
}
Run Code Online (Sandbox Code Playgroud)
选项2:
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Do your task
}
}, 0, interval);
Run Code Online (Sandbox Code Playgroud)
选项3:
volatile boolean flag = true;
public void someMethod(){
// Do your task
try{
Thread.Sleep(interval);
} catch(Exception e){
}
if(flag)
return;
else
someMethod();
}
Run Code Online (Sandbox Code Playgroud)
选项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);
Run Code Online (Sandbox Code Playgroud)
还有更多选择.我从未尝试过选项3和4.它只是出现在我的脑海里,我写道.如果我是你,我会使用1或2中的任何一个.
首选是
java.util.concurrent.ScheduledExecutorService
Run Code Online (Sandbox Code Playgroud)
更新更强大的实现,更多这里ScheduledExecutorService
我会使用计时器来实现这一点。尝试这个:
void onCreate()
{
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Download your stuff
}
}, 0, 1000);
}
Run Code Online (Sandbox Code Playgroud)
它会立即启动,并且每秒都会调用 run-Method。