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

时间:2011-07-04 20:55:31

标签: android multithreading algorithm android-sdcard

stackoverflow的新功能,搜索非常有帮助,但是现在是时候提问了。

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

  1. 需要处理串行端口上通过adb传入的数据包,这些数据包是程序执行其计算所需的状态数据。这些数据包将每40ms发送一次,因此我计划使用它们的到达来触发处理的开始。
  2. 需要知道算法是否花费的时间超过40毫秒并取消它(如果是这样)并在串口上发回消息,它会覆盖它。
  3. 计算结果需要通过串口连接通过tcp和adb
  4. 发回
  5. 需要将计算中间数据记录到SD。这可能是相当多的数据,大约140k,每40ms。
  6. 所以我很难把所有的东西放在一起。我无法理解一个核心如何能够跟上所有这一切的进展?

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

    1. 所以我启动一项服务来处理来自客户端的tcp数据包
    2. 使用绑定到主工作线程的服务来处理对SD卡的写入
    3. 所以假设这个设置,我可以使算法部分具有一定的确定性,以便它在获得新的tcp数据包时始终运行,并在后台抢占SD写入吗?

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

      感谢。

1 个答案:

答案 0 :(得分:1)

是的我认为你是对的,为你的第一个应用程序选择更容易的东西会更好;) 但据我了解你要做的事情,我不认为你需要异步多处理。你得到一些想要处理它并传递结果的数据。我认为HandlerThread正是您正在寻找的。它能够收到Messages 里面的数据。您将它们发送到Handler并以重写的handleMessage(Message m)方法处理它们。因此,每次您收到消息时,您都可以记录时间 并查看最后一个是否超过您的限制。如果是,您可以抛出Message或整个队列,或者向您的串口发送一条消息,告知溢出。 这可以按照您在服务中的建议实施。可以使用Thread.PRIORITY_BACKGROUND启动另一个HandlerThread以将所有内容写入SD。 如果将Messenger应用于处理程序

,您甚至可以非常轻松地发送消息