gpt4 book ai didi

Android "misses"使用ScheduledExecutorService 定期执行Thread

转载 作者:行者123 更新时间:2023-11-29 22:32:24 27 4
gpt4 key购买 nike

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

无论如何,假设我有一个函数可以完成这项工作,它叫做 scanWifi()。我最初想这样开始:

ExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();

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

遗憾的是,这只有在手机插入时才能可靠地工作。如果它被拔出并放置一段时间,它不会每分钟运行我的 scanWifi() 函数。有时,对 scanWifi() 的单次调用之间会有几分钟的间隔。

我也尝试使用 Timer/TimerTask 做同样的事情,但结果也很差。

到目前为止,唯一似乎或多或少可靠的方法是将其发布到处理程序并重复调用它,如下所示:

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在我的应用程序中。

最佳答案

我认为您正在寻找的是 AlarmManager。例如,请参阅以下问题:Android: How to use AlarmManager

关于Android "misses"使用ScheduledExecutorService 定期执行Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com