Android保持线程活着的问题

时间:2012-08-12 18:28:13

标签: android multithreading tcp

我正在构建一个Android应用程序,它将通过TCP与服务器进行通信。我有一些实施的想法,我不知道哪种方式最好。我是新手,我的设计在学习新事物的过程中不断发展,所以现在我正在寻找有关如何最好地实现解决方案以实现我的目标的建议。

目标:能够:

  1. 将数据发送到服务器
  2. 将数据发送到服务器并阅读服务器响应。

    • 我发送的一些信息是提供服务器信息,其他信息是从服务器请求信息。
  3. 可能的实施:

    • Thread Run()方法不断循环检查我的发送队列是否有要发送的东西(如果有的话,发送它),然后检查我是否有任何要读回的内容。
      • 这会耗尽电池/刻录CPU吗?
    • 每次我想发送/接收时创建一个新线程,一旦我完成'发送'或'发送+接收'就让它死掉
      • 我应该如何与一个套接字同步线程交互?阻止制作下一个帖子直到这个完成?
    • 每次我需要写或写+读时,创建一个线程并调用一个发送或发送+接收方法
      • 如何在不烧电池/ CPU的情况下保持线程活动?
      • 我应该使用队列来处理传输数据的请求吗?我应该同步它的读取,直到当前的读/写完成为止?

    非常感谢有关潜在问题的任何其他指针,链接或警告。示例代码特别受欢迎,因为我刚开始使用它。谢谢。

1 个答案:

答案 0 :(得分:2)

正如您所指出的,有几种方法可以实现这一目标,每种方法都有其优点和缺点。

断开连接或经常重新发送它们肯定会对电池持续时间产生影响。如果这是你的情况,我会考虑在每一定时间内将一些请求批量化。这是一个有趣的article

我几天前写过一篇关于我经常使用的方法,它非常好用。它可以像它看起来一样简单,也可以为Android应用程序设置整个API通信引擎的基础。这取决于您的需求。它基本上是在后台线程池中执行您的请求,由服务控制并在您的活动或您需要的任何内容中通知。 每当你需要推送一个新请求时,就像将它排队并设置回调一样简单。 如果您认为这可能对您有用,我会给您留下一对更深入的链接。

http://ugiagonzalez.com/2012/07/02/theres-life-after-asynctasks-in-android/ http://ugiagonzalez.com/2012/08/03/using-runnables-queues-and-executors-to-perform-tasks-in-background-threads-in-android/

希望它有所帮助。