5

スレッドを実行したい (バックグラウンドで時間のかかるタスクを実行し、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;
    }
}

Handlerこれを実装するために使用する必要がありますか?

4

3 に答える 3

22

オプション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のいずれかを使用します。

于 2013-03-14T10:28:18.663 に答える
5

これを実現するにはタイマーを使用します。これを試して:

void onCreate()
{
    Timer t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            // Download your stuff
        }

    }, 0, 1000);
}

すぐに開始され、run-Method が毎秒呼び出されます。

于 2013-03-14T10:16:40.830 に答える