代码之家  ›  专栏  ›  技术社区  ›  pableu

Android使用ScheduledExecutorService“错过”线程的周期性执行

  •  1
  • pableu  · 技术社区  · 15 年前

    我有一个android应用程序,它可以反复从周围的wifi网络收集指纹(出于科学原因,不侵犯任何人的隐私)。

    不管怎样,想象一下我有一个函数做这个工作,它叫做 . 我最初想这样开始:

    ExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();
    
    mExecutor.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            scanWifi();
        }
    }, 0, interval, TimeUnit.MILLISECONDS);
    

    我还尝试过使用计时器/计时器任务来做同样的事情,但结果也很差。

    Handler h = new Handler();
    Runnable r = new Runnable() {
        @Override
        public void run() {
            if (!mIsStopped) {
                scanWifi();
                h.postDelayed(this, mInterval);
            }
        }
    };
    h.post(r);
    

    为什么会这样?CPU是否处于休眠状态,从而错过了预定的执行?我拿着一把枪 partial wakelock 在我的应用程序中。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    8 年前

    我想你要找的是一个经理。例如,见以下问题: Android: How to use AlarmManager