【问题标题】:Real difference between AsyncTask and ThreadAsyncTask 和 Thread 之间的真正区别
【发布时间】:2012-07-30 07:30:16
【问题描述】:

我一直在阅读 Android 文档 (AsyncTask, Thread) 和 vogella tutorial 关于这件事,但我还有疑问。

例如,我想从 Android 应用程序向服务器发送消息。我希望这个过程能够响应。我应该使用什么?

我已经看到他们创建一个新的Thread 用于不阻止 UI 的示例,但是这样我们就没有进程的进度,您还必须在 Thread 中处理响应,因为 run()方法不返回任何内容。

AsyncTask 似乎比Thread 更好,但我不知道使用AsyncTask 而不是Thread 的后果是什么。

【问题讨论】:

    标签: android multithreading android-asynctask difference asynctaskloader


    【解决方案1】:

    请阅读此博客

    http://crazyaboutandroid.blogspot.in/2011/12/difference-between-android.html

    详细信息如下:

    Android Service、Thread、IntentService和AsyncTask的区别

    什么时候使用?

    服务

       Task with no UI, but shouldn't be too long. Use threads within service for long tasks.
    

    线程

    - Long task in general.
    
    - For tasks in parallel use Multiple threads (traditional mechanisms)
    

    异步任务

    - Small task having to communicate with main thread.
    
    - For tasks in parallel use multiple instances OR Executor 
    

    【讨论】:

    • 您从哪里得知AsyncTask 用于小任务而Thread 用于长任务?为什么一个人不应该将AsyncTask 用于长时间的任务?
    • @BugsHappen 请检查以下链接,您将了解为什么建议将 AsyncTask 用于小任务。
    • 你指的是哪个链接?
    • @BugsHappen 这是一个非常好的问题,技术上异步任务和线程没有区别,唯一的区别是异步任务可以通过其回调方法更新 UI。因此,就应该在其中执行的操作的长度而言,异步任务和线程之间应该没有区别。
    • 死链接,博客表见here
    【解决方案2】:

    这里所有其他答案都不完整,AsyncTask和Thread有很大区别,即

    线程可以从任何线程、main(UI) 或后台触发;但 AsyncTask 必须从主线程触发。

    同样在 Android 的较低 API(不确定,可能 API 级别

    更多信息请阅读Difference between Android Service, Thread, IntentService and AsyncTask

    一般

    线程

    • 一般来说是长任务。

    • 对于并行任务使用多线程(传统机制)

    异步任务

    • 必须与主线程通信的小任务。

    • 对于并行任务使用多个实例或执行器

    【讨论】:

    • 为什么要在AsyncTask中只运行短任务?由于线程和异步任务的操作方式相似?
    【解决方案3】:

    一般使用 2 这个特性是等价的,但是 AsyncTask 在与 GUI 的集成方面更简单

    【讨论】:

    • 但是 android 文档说“AsyncTasks 应该理想地用于短操作(最多几秒钟)。”
    • 是的,因为您使用 GUI 并且用户不想等待很长时间 :)
    • 但是 AsynTask 会像一个独立的线程一样运行。他的工作不应该影响到主线程(GUI)。还是我错了?
    • 是的,您需要同步 2 点:onreexecute 和 onpostexecute
    【解决方案4】:
    • 我更喜欢使用 Async Task,因为它会让您知道何时 background process 得到开始和结束,我什么时候可以parse 响应。
    • AsynconPreExecuteonPostExecute 这样的方法,可以让我们在调用后台之前和之后执行任务 任务。

    【讨论】:

      【解决方案5】:

      AsyncTask 允许正确且轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

      你可以控制它自己的功能

      doInBackground(参数...参数), onCancelled(), onPostExecute(Result 结果), onPreExecute(), nProgressUpdate(进度...值), 发布进度(进度...值)

      【讨论】:

        【解决方案6】:

        AsyncTask enables proper and easy use of the UI thread. - 来自Developer

        问题是 - AsyncTask 是一种特殊的线程 - 它是一个 GUI 线程,它在后台工作,还可以让你用 GUI 做一些事情 - 它基本上是为你“预编程”的函数@ 987654323@.

        为了使Thread 以这种方式工作,您必须编写大量代码。

        【讨论】:

        • 不需要大量代码。使用处理程序非常基础
        猜你喜欢
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多