首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android中,在精确的n毫秒后重复一项任务

在android中,在精确的n毫秒后重复一项任务
EN

Stack Overflow用户
提问于 2017-06-22 10:06:04
回答 4查看 1.6K关注 0票数 2

我的要求是在每毫秒精确采样一次android传感器数据。

尝试使用timeralarmManagerhandler。任务重复,但持续时间不是精确的n毫秒。

代码::

手柄:

代码语言:javascript
复制
Handler sensorHandler = new Handler();
    private Runnable sensorRunnable = new Runnable() {
        @Override
        public void run() {
            sendAllSensorData();
            sensorHandler.postDelayed(sensorRunnable, 50);
        }
    };

    private void postSensorMsgHandler() {
        sensorHandler.postDelayed(sensorRunnable, 50);
    }

Timer ::私有的void initTimer() {

timer =新计时器();

代码语言:javascript
复制
timer.scheduleAtFixedRate(new TimerTask() {
    public void run() {
        sendAllSensorData();
    }
}, TelemetricConstant.delay, TelemetricConstant.SAMPLE_PERIOD);

}

日志:

代码语言:javascript
复制
06-22 15:34:53.201 D/Telemetric(27434): Telemetric Gyroscope Y mean = -0.000533 sd = 0.000958 variance = 0.000001

06-22 15:34:53.212 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.001057 sd = 0.000000 variance = 0.000000

06-22 15:34:53.253 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000524 sd = 0.000754 variance = 0.000001

06-22 15:34:53.264 D/Telemetric(27434): Telemetric Gyroscope Y mean = -0.000009 sd = 0.001066 variance = 0.000001

06-22 15:34:53.306 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000524 sd = 0.001376 variance = 0.000002

06-22 15:34:53.317 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000844 sd = 0.001390 variance = 0.000002

06-22 15:34:53.361 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000702 sd = 0.001291 variance = 0.000002

06-22 15:34:53.370 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000600 sd = 0.001209 variance = 0.000001

06-22 15:34:53.414 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000391 sd = 0.001266 variance = 0.000002

06-22 15:34:53.423 D/Telemetric(27434): Telemetric Gyroscope Y mean = 0.000465 sd = 0.001205 variance = 0.000001
EN

回答 4

Stack Overflow用户

发布于 2017-06-22 10:07:27

试试这个,

代码语言:javascript
复制
//Create Timer Object 
Timer t = new Timer();
//Set your schedule time
t.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        //Called each time when 1000 milliseconds (1 second)
    }

},
//Set start timing (milliseconds)
0,
//Set interval time(milliseconds)
1000);
票数 2
EN

Stack Overflow用户

发布于 2017-06-22 10:26:35

Android并不是一个“实时操作系统”来获得你想要的高度精确,你可能需要另一个硬件,例如,一些嵌入了Raspberry的硬件.和另一个操作系统,例如一些"RealTime Linux“13x.pdf

票数 0
EN

Stack Overflow用户

发布于 2017-06-22 11:43:02

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44696275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档