Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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
Java Android:从不同线程获取传感器数据_Java_Android_Multithreading_Sensors - Fatal编程技术网

Java Android:从不同线程获取传感器数据

Java Android:从不同线程获取传感器数据,java,android,multithreading,sensors,Java,Android,Multithreading,Sensors,我必须为教育目的开发一个Android应用程序。 该应用程序使用智能手机的硬件传感器,尤其是加速计。 必须提出申请​​由多个模块组成,例如后台服务,所有模块都需要实时访问来自加速计的相同数据,以便每个模块都可以使用数据进行自己的计算。 例如,假设我有一个活动/用户界面,我可以从中选择要启动的服务。 为了简单起见,假设我只有两个服务,我可以选择只启动第一个服务,只启动第二个服务,或者同时启动两个服务。 第一服务从加速计读取数据并将所有数据写入文本文件; 相反,第二个服务使用加速计的数据来计算加速度

我必须为教育目的开发一个Android应用程序。 该应用程序使用智能手机的硬件传感器,尤其是加速计。 必须提出申请​​由多个模块组成,例如后台服务,所有模块都需要实时访问来自加速计的相同数据,以便每个模块都可以使用数据进行自己的计算。 例如,假设我有一个活动/用户界面,我可以从中选择要启动的服务。 为了简单起见,假设我只有两个服务,我可以选择只启动第一个服务,只启动第二个服务,或者同时启动两个服务。 第一服务从加速计读取数据并将所有数据写入文本文件; 相反,第二个服务使用加速计的数据来计算加速度的大小,如果它大于给定的阈值,它将振幅写入另一个文件,否则它什么也不做


如何使两个服务共享相同的数据? 我应该把数据放在缓冲区或类似的地方吗?我可能需要长时间收集加速计的数据,例如以最快的速度收集8/12小时的数据

我不知道该怎么做

你能帮我吗


非常感谢

我如何才能使这两个服务共享相同的数据?-你可以从放弃一项服务开始。在您的示例中,没有理由说明单个服务不能同时写入文件和执行计算。单个服务是做一件事还是同时做两件事都可以由UI控制。服务不是通用的Java类。只有在有明确的技术原因时才创建单独的服务,这通常是因为它们的生命周期截然不同。另外,根据你的问题标题,服务不是线程。好的,你的意思是,如果我去掉一个服务,我应该为服务内的每个操作启动一个线程吗?在这种情况下,当我启动服务时,选择两个操作,我是否应该启动一个将数据保存到文件中的线程和一个执行计算的线程?我应该为服务内的每个操作启动一个线程?-不一定。写入文件不必与执行计算和写入另一个文件并行进行。只有当你知道为什么要使用某项服务时才使用该项服务;只有当您知道为什么要使用多个并行线程时,才能使用多个并行线程。好的,谢谢。实际上,写入文件和进行其他计算必须并行进行,因为教授希望我使用一个循环缓冲区,在其中插入加速度计的数据,所以我必须将它们从缓冲区存储到文件中,然后才能被新数据覆盖。此外,我还必须实时计算加速度的振幅等,因为我需要这些值来进行实时坠落检测。因为教授希望我使用一个循环缓冲区——将循环缓冲区保存在内存中,并且只定期将其写入磁盘。这种周期性写入可能会使用单独的线程,但只有在对缓冲区进行N次更新之后才会使用。不要在每次传感器读数时都写入磁盘。目前,你的应用程序在不充电的情况下运行8.5小时的可能性很小,因为你会一直保持CPU运行。如果您试图每秒执行几十次或数百次磁盘I/O,您将落后,电池消耗速度会快得多。