AsyncTask vs Thread vs Service(与服务器通信)

时间:2014-07-27 15:13:51

标签: java android multithreading android-fragments android-asynctask

我正在尝试实现一个Android应用程序,我可以将命令发送到控制机器人的服务器。问题非常“简单”:我想保持连接并与线程服务任务通信以向服务器发送消息,并获得更新UI的响应并使用户从机器人传感器获取相关信息

那么,我的决定应该是什么?我知道它可能是重复的。但我没有找到同样的问题,因为我想扩展这个问题:

有没有办法在活动上运行后台进程,更改活动并继续运行?(活动或片段,我将在未来使用片段。)

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

最好的解决方案可能是服务。 关于服务的一篇非常好的文章,包括如何通过Intent或广播事件与后台服务进行通信,可以在http://www.vogella.com/tutorials/AndroidServices/article.html

找到。

答案 1 :(得分:1)

这是一个使用Android应用程序的参考代码,Arduino控制机器人。您可以看到它的结构也是我在机器人中使用的结构。 AsynkTasks在这方面不是一个好选择。使用服务是长跑通信的好理念

https://code.google.com/p/mover-bot/

这是Android控制机器人的现场演示。

Mover Bot

答案 2 :(得分:1)

您的情况的一个典型模型是使用:

  • 长时间通讯的服务(从队列中取出"订单"
  • BroadcastReceiver将收到有关Service
  • 处理的异步事件的通知
  • 处理用户界面的活动

要考虑的一个参考是here

答案 3 :(得分:1)

在Background中完成工作并将结果通知给UI线程。

浏览this以获取更详细的概述。

<强>的AsyncTask

这是一个围绕Thread和Handler的助手类,用于制作线程并且易于使用。只需在后台执行任务并在UI线程中发布结果。

http://developer.android.com/reference/android/os/AsyncTask.html

<强>发

在java中使用线程的基本概念,创建自己的线程池执行任务并使用处理程序在UI线程中发布结果。主要用于当您的ui可见时需要更长时间运行任务时(用于简单的后台任务asynctask)。这需要一段时间来实施,但可以让您更好地控制任务管理。

https://developer.android.com/training/multiple-threads/create-threadpool.html

<强>服务

如果您有更长时间的运行任务,并且您希望您的ui独立于您的任务,则会使用服务。

在您的情况下,我希望您使用服务进行通信,并使用活页夹或广播管理器来反映用户界面的变化。

http://developer.android.com/guide/components/services.html