gpt4 book ai didi

android - 复杂的android多线程问题,寻找一些指导

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:15 26 4
gpt4 key购买 nike

stackoverflow 的新手,搜索非常有帮助,但可惜是时候提出问题了。

我正在尝试使用 android 2.2 单核手机进行一些研究。我已经实现了一种算法,它可以进行相当多的计算并产生大量数据。这些数据必须经过处理,解决方案会在 40 毫秒的时间范围内返回给客户端应用程序,然后使用来自客户端的新状态数据再次处理。此外,计算结果必须作为数据日志存储到 SD 卡中。因此,作为多线程和 android 的新手,我应该在我的应用程序中使用什么来执行以下操作:(作为旁注,这款手机在研究模式下不打算用作手机,手机将处于飞行模式with wireless off,所有可以关闭的应用都会被关闭,并且一旦启动运行就不需要UI显示和交互...)

  1. 需要处理通过串行端口上的 adb 传入的数据包,这些数据包是程序需要执行其计算的状态数据。这些数据包将每 40 毫秒发送一次,因此我计划使用它们的到达来触发处理的开始。
  2. 需要知道算法是否花费的时间超过 40 毫秒,如果是,则取消它,并在它超时的串行端口上发送回消息。
  3. 计算结果需要通过tcp和adb串口传回
  4. 需要将计算中间数据记录到SD中。这可能是相当多的数据,大约 140k,每 40 毫秒。

所以我很难把所有的部分放在一起。我无法理解单个内核将如何同时跟上所有这一切?

所以这是我的想法,请告诉我我是否走在正确的道路上。我不是要你解决我的问题,只是关于如何打破这个野兽的任何建议:

  1. 所以我启动了一个服务来处理来自客户端的 tcp 数据包
  2. 使用绑定(bind)到主工作线程的服务来处理对 SD 卡的写入

所以假设这个设置,我能否使算法的一部分有点确定性,以便它在收到新的 tcp 数据包时始终运行,并抢占后台正在进行的 SD 写入?

啊...应该为我的第一个程序选择一些更简单的东西

谢谢。

最佳答案

是的,我认为你是对的,最好为你的第一个应用程序选择更简单的东西;)但据我了解你想做什么,我不认为你需要异步多处理。你得到一些数据想要处理它并传递结果。我认为 HandlerThread正是您要寻找的。它能够接收Messages里面有数据。您将它们发送到 Handler并在覆盖的 handleMessage(Message m) 方法中处理它们。因此,每次收到消息时,您只需记录时间并查看最后一个是否超过您的限制。如果是,您可以只抛出消息或整个队列,或将消息发送到您的串行端口以指示溢出。这可以按照您在服务中的建议实现。另一个HandlerThread可以从 Thread.PRIORITY_BACKGROUND 开始,将所有内容写入 SD。如果您申请 Messenger,您甚至可以非常舒适地发送消息给处理程序

关于android - 复杂的android多线程问题,寻找一些指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575992/

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