处理程序 postDelayed 根据配置延迟更长的时间

发布于 2024-11-04 03:39:58 字数 475 浏览 3 评论 0原文

我尝试开发一个简单的定时器蜂鸣器,每小时发出一次声音。对于我使用服务和处理程序的时间,这里是示例:

    void onStart(...){
        handler.postDelayed(timerRunnable, ONE_HOUR);
    }

    private Runnable timerRunnable = new Runnable() {

    @Override
        public void run() {
               ...beep
               handler.postDelayed(timerRunnable, ONE_HOUR);
        }
    };

但是 run() 方法将被不确定性地触发,我认为它取决于当前设备的使用情况。

我已经尝试使用 TimerTask 和“手动”线程实现相同的场景,但具有相同的不确定性结果。

I try to develop a simple timer beeper, that peep hourly. For the timing I use a Service and handler, here the example:

    void onStart(...){
        handler.postDelayed(timerRunnable, ONE_HOUR);
    }

    private Runnable timerRunnable = new Runnable() {

    @Override
        public void run() {
               ...beep
               handler.postDelayed(timerRunnable, ONE_HOUR);
        }
    };

but run() method will be fired nondeterministic, I think it is dependent from the current device usage.

I have try the same scenario with TimerTask and with 'manualy' Thread implementation, but with the same nondeterministic result.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慕巷 2024-11-11 03:39:58

对于如此长的延迟,您可能会使用 AlarmManager 获得更好的运气。 Handler 最适合当您的应用程序位于前台时出现滴答声和超时。

http://developer.android.com/reference/android/app/AlarmManager.html

You'll probably have better luck using the AlarmManager for such a long delay. Handler is best for ticks and timeouts while your app is in the foreground.

http://developer.android.com/reference/android/app/AlarmManager.html

雾里花 2024-11-11 03:39:58

Android 不是实时操作系统。 postDelayed() 的所有保证是它至少会达到指定的毫秒数。除此之外,主要取决于主应用程序线程正在执行的操作(如果您将其绑定,则它无法处理 Runnable),其次取决于设备上正在执行的其他操作(服务运行于后台优先级,因此比前台获得更少的 CPU 时间)。

Android is not a real-time operating system. All postDelayed() guarantees is that it will be at least the number of milliseconds specified. Beyond that will be dependent primarily on what the main application thread is doing (if you are tying it up, it cannot process the Runnable), and secondarily on what else is going on the device (services run with background priority and therefore get less CPU time than does the foreground).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文