Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用更好的方式计时Android线程?(运行不同步)_Android - Fatal编程技术网

用更好的方式计时Android线程?(运行不同步)

用更好的方式计时Android线程?(运行不同步),android,Android,嘿,我目前正在设计一个应用程序,其中一些代码每200毫秒执行一次。我用于此的线程如下所示(简化): check()包含一些非UI代码行 问题是,postDelayed-200-ms是在队列完全执行时开始的,而不是在开始时,因此系统需要始终执行命令堆栈和堆栈,因此它们实际上约为210-230ms(取决于CPU负载) 然后,我尝试在线程开始时获取系统日期,并向其添加200ms,但这会导致其他一些“更严重”的错误 我没有问题超过200毫秒的延迟,我只是想让它运行稳定 我希望你能理解我的问题,能给我一些

嘿,我目前正在设计一个应用程序,其中一些代码每200毫秒执行一次。我用于此的线程如下所示(简化):

check()包含一些非UI代码行

问题是,postDelayed-200-ms是在队列完全执行时开始的,而不是在开始时,因此系统需要始终执行命令堆栈和堆栈,因此它们实际上约为210-230ms(取决于CPU负载)

然后,我尝试在线程开始时获取系统日期,并向其添加200ms,但这会导致其他一些“更严重”的错误

我没有问题超过200毫秒的延迟,我只是想让它运行稳定

我希望你能理解我的问题,能给我一些建议

编辑:我知道处理程序的运行是可以接受的(在200ms上延迟4ms)。问题是我当时调用的方法。我将打开一个新问题

如果check()包含非ui代码行,那么您应该在单独的线程中运行这些代码行

底线是UI线程非常忙,因此,你可以要求它每200毫秒做一件事,但你不能保证任何精度,因为设备正在尽最大努力做各种其他事情。当你说“更严重的问题”时,你到底是什么意思


我会尝试启动一个线程,每200毫秒记录一次日志,看看设备是否愿意以您希望的速度准确地做任何事情。如果是这样,那么您可以向UI线程发送消息以进行绘制,如果您发现是绘图延迟了,那么您可能需要减少延迟以给UI线程完成绘制的时间?(显然,这也是非常不精确的,并且会因设备而异)。

您是否尝试使用?基本实现如下所示

new Timer().scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
    // TODO Auto-generated method stub

    }
}, 200, 200);

您也可以尝试使用报警服务。这将为您提供准确(或至少一致)的结果。

试试thread.sleep;谢谢你的评论,但这个结果几乎是一样的问题:/看起来200ms让它变得很困难。是的,如果它是600或类似的,没有人会注意到延迟OK,我现在尝试排除所有与UI相关的代码,但所有这些仍然运行极不均匀>。非常感谢这个想法,我像你贴的那样试过,结果完全一样。我会试试闹钟服务。如果它有效,我将标记为答案:)
new Timer().scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
    // TODO Auto-generated method stub

    }
}, 200, 200);