【问题标题】:AsyncTask vs Thread vs Service (communicating with server)AsyncTask vs Thread vs Service(与服务器通信)
【发布时间】:2014-07-27 15:13:50
【问题描述】:

我正在尝试实现一个 android 应用程序,我可以在其中向控制机器人的服务器发送命令。问题非常“简单”:我想保持连接并与 thread-service-task 通信以向服务器发送消息,并获取更新 UI 的响应并让用户获得来自机器人传感器的相关信息.

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

有什么方法可以在 Activity 上运行后台进程,更改 Activity 并使其继续运行?(Activity 或 Fragment,我以后会选择 Fragment)。

提前感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      • 长期通信服务(从队列中获取“订单”
      • BroadcastReceiver 将收到有关 Service 处理的异步事件的通知
      • 处理 UI 的活动

      一个值得考虑的参考是here

      【讨论】:

        【解决方案3】:

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

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

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

        Mover Bot

        【讨论】:

          【解决方案4】:

          在后台执行您的工作并将结果通知给 UI 线程。

          通过this 了解更详细的概述。

          异步任务

          它是一个围绕 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

          【讨论】:

            猜你喜欢
            • 2017-02-13
            • 2014-08-30
            • 2018-02-18
            • 1970-01-01
            • 1970-01-01
            • 2023-02-12
            • 1970-01-01
            • 1970-01-01
            • 2020-12-21
            相关资源
            最近更新 更多