使用tasktimer重复调用异步任务(比如说每10秒)

时间:2014-08-18 15:29:33

标签: android asynchronous

我的要求是每10秒重复调用一次异步任务,以便web服务获取数据并相应地更新(更新地图和图像)。

我一直在搜索,发现可以使用任务计算器。我面临的问题是参数被传递到我的asynctask。但是我无法将该参数传递给任务时间。

我发现为此应创建一个扩展计时器任务的单独类。但我不知道如何根据我的需要完成这项工作。

请善待我。下面给出了将参数传递给异步任务的代码。

new AsyncLoadGpsDetails().execute(userName);

我想重复执行异步任务。 PLease帮助我,我不知道如何创建扩展tasktimer的类,因为我是新手。

谢谢&提前问候

2 个答案:

答案 0 :(得分:0)

以下是Timer和TimerTask的示例:

private Timer mTimer;
private TimerTask mTimerTask;

private void launchTimerTask() {

    mTimer = new Timer();
    mTimerTask = new TimerTask() {
        @Override
        public void run() {
            // Perform your recurring method calls in here.
            new AsyncLoadGpsDetails().execute(userName);
        }
    };
    mTimer.schedule(mTimerTask, // Task to be executed multiple times
            0, // How long to delay in Milliseconds
            10000); // How long between iterations in Milliseconds
}

private void finishTimerTask() {
    if (mTimerTask != null) {
        mTimerTask.cancel();
    }
    if (mTimer != null) {
        mTimer.purge();
        mTimer.cancel();
    }
}

对于TimerTask,您需要以下导入:

import java.util.Timer;
import java.util.TimerTask;

如果可能,我会使用ScheduledExecutor(Java Timer vs ExecutorService?)。有很多例子,但这里有一个快速片段:

private ScheduledExecutorService mService;
private ScheduledFuture mFuture;

private void launchScheduledExecutor() {
    mService = Executors.newSingleThreadScheduledExecutor();
    mFuture = mService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                // Perform your recurring method calls in here.
                new AsyncLoadGpsDetails().execute(userName);
            }
        },
        0, // How long to delay the start
        10, // How long between executions
        TimeUnit.SECONDS); // The time unit used
}

private void finishScheduledExecutor() {
    if (mFuture != null) {
        mFuture.cancel(true);
    }
    if (mService != null) {
        mService.shutdown();
    }
}

确保在完成后关闭ExecutorService。

对于上面的代码段,您需要以下导入:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

您可以随时随地致电launch(或许onClickListeneronCreate)。请确保在某个时刻调用“完成”,否则它们将无限期地运行(例如在onDestroy中)

答案 1 :(得分:0)

您可以使用scheduleAtFixedRate或scheduleWithFixedDelay ...

<强> scheduleAtFixedRate

  // this task for specified time it will run Repeat
  repeatTask.scheduleAtFixedRate(new TimerTask() {
  @Override
  public void run() {
              // Here do something
              // This task will run every 10 sec repeat
        }
  }, 0, 10);

<强> scheduleWithFixeDelay

scheduler.scheduleWithFixedDelay(new TimerTask() {
  @Override
  public void run() {
              // Here do something
              // This task will run every 10 sec Delay
        }
  },, 0, 10, TimeUnit.SECONDS);

找出它们之间的区别Here