java - 每秒执行一次方法

标签 java android multithreading

我想在 android 中每秒执行一些代码,但我想在一个线程(主线程)中执行。到目前为止我有这个:

locationTimer = new Timer("locationTimer", false);
locationTimer.schedule(new LocationCheckerTask(this), 0, 1000);

public class LocationCheckerTask extends TimerTask {
    private GeoWatcher watcher;

    public LocationCheckerTask(Context context) {
        watcher = new GeoWatcher(context);
    }

    @Override
    public void run() {
        // funky stuff
    }
}

不幸的是,Timer 类在另一个线程上运行它的任务。 为什么我想在一个线程中执行此操作? run() 方法中的代码将执行得非常快,所以我认为我不需要另一个线程。我想做的是根据每秒计算的条件在 run() 方法中构造单独的线程。因此,我不想让子线程构造另一个线程,而是想在主线程上执行此操作。

最佳答案

您可以使用 Handler 执行此操作

public class Job implements Runnable{
    private Handler handler;

    public Job () {
       handler = new Handler(Looper.getMainLooper());
       loop();
    }

    @Override
    public void run() {
        // funky stuff
        loop();
    }

    private void loop() {
        handler.postDelayed(this, 1000);
    }
}

关于java - 每秒执行一次方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785332/

相关文章:

java - 在 ArrayList 线程安全上移动对象的最佳方法是什么?

Android CollapsingToolbarLayout 副标题

java - 如何有条件地禁用 Java 中的同步块(synchronized block)?

java - 如何使用 Jericho 解析器设置用户代理

java - Hibernate Search 在插入后不会重新索引 lucene 索引

android - onProviderEnabled 不起作用?

java - 如果在同步方法中调用,thread.yield() 是否会失去对对象的锁定?

c# - Thread.Yield 假设的解释

java - 当键是数组时对映射键进行排序

android - 如何在 Android 中实现 MediaPlayer 错误重启?