android中的异步任务与线程

android中的异步任务与线程,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,在UI中,为了执行一些后台工作,我使用了一个单独的线程。但正如其他人所建议的,我现在使用的是AsyncTask 线程和异步任务之间的主要区别是什么 在这种情况下,我应该使用线程还是异步任务?执行长时间运行或CPU密集型任务,基本上有两种方法:Java线程和Android的本机异步任务 两者都不一定比另一个好,但知道何时使用每个调用对于利用系统性能为您带来好处至关重要 将异步任务用于: 不需要下载大量数据的简单网络操作 可能需要几毫秒以上时间的磁盘绑定任务 将Java线程用于: 涉及中到大量数据的

在UI中,为了执行一些后台工作,我使用了一个单独的
线程
。但正如其他人所建议的,我现在使用的是
AsyncTask

线程
异步任务
之间的主要区别是什么


在这种情况下,我应该使用
线程
还是
异步任务

执行长时间运行或CPU密集型任务,基本上有两种方法:Java线程和Android的本机异步任务

两者都不一定比另一个好,但知道何时使用每个调用对于利用系统性能为您带来好处至关重要

将异步任务用于:

  • 不需要下载大量数据的简单网络操作
  • 可能需要几毫秒以上时间的磁盘绑定任务
  • 将Java线程用于:

  • 涉及中到大量数据的网络操作(上传或下载)
  • 需要在后台运行的高CPU任务
  • 要控制相对于GUI线程的CPU使用率的任何任务
  • 互联网上有很多很好的资源可以帮助你:

    线程

    线程是一个并发执行单元。它有自己的调用堆栈。 有两种方法可以在应用程序中实现线程

    一种是提供一个新类来扩展线程并重写其 run()方法。另一个是提供一个新的线程实例 可运行对象在其创建期间。线程可以由 调用它的“start”方法。您可以通过以下方式设置线程的“优先级” 调用其“setPriority(int)”方法

    如果对UI部分没有影响,则可以使用线程。对于 例如,您正在调用某个web服务或下载某些数据 下载后,您将在屏幕上显示它。那么你需要 使用带有线程的处理程序,这将使您的应用程序 处理来自线程的所有响应非常复杂

    处理程序允许您发送和处理消息和可运行对象 与线程的MessageQueue关联。每个线程都有每条消息 队列(类似于待办事项列表),线程将接收每条消息并 处理它,直到消息队列为空。那么,当处理程序 进行通信时,它只向调用线程发送一条消息,它将 等待处理

    如果使用Java线程,则需要处理以下事项 您自己的代码中的要求:

    如果将结果回发到主线程,则与主线程同步 用户界面无用于取消线程的默认值无默认线程 在Android中没有处理配置更改的默认池

    异步任务

    AsyncTask允许正确且轻松地使用UI线程。这个班 允许在服务器上执行后台操作和发布结果 UI线程,而无需操作线程和/或处理程序。一 异步任务是由在服务器上运行的计算定义的 后台线程,其结果发布在UI线程上

    AsyncTask将经历以下4个阶段:

    onPreExecute()

    在执行任务之前在UI线程上调用

    doInbackground(参数)

    在onPreExecute()之后立即在后台线程上调用 完成执行

    onProgressUpdate(进度…)

    在调用publishProgress(Progress…)后在UI线程上调用

    onPostExecute(结果)

    后台计算完成后在UI线程上调用

    为什么要使用AsyncTask?

    易于用于UI线程。(因此,当调用线程是 UI线程)

    不需要操纵处理程序


    有关更多信息,请访问

    如果使用Java线程,则必须在自己的代码中处理以下要求:

    如果将结果回发到主线程,则与主线程同步 用户界面

    没有用于取消线程的默认值

    没有默认的线程池

    在Android中没有处理配置更改的默认设置


    线程

    • 长任务一般
    • 通过thread.start()方法调用
    • 从任何线程触发
    • 在自己的线程上运行
    • 手动线程管理/代码可能变得难以阅读
    异步任务

    • 小任务必须与主线程通信
    • 通过excute()方法调用
    • 从主线程触发
    • 在工作线程上运行
    • 必须从主线程执行和创建

      • 线程:

        Thread
        应用于将长时间运行的操作与主线程分离,以提高性能。但它无法优雅地取消,也无法处理Android的配置更改。您无法从
        线程
        更新UI

        AsyncTask
        可用于处理持续时间小于5ms的工作项。使用
        AsyncTask
        ,您可以更新UI,而不像java
        线程
        。但许多长时间运行的任务会阻碍性能

        除了这两种方法,你几乎没有其他选择

        /及

        有关更多详细信息,请参阅以下帖子:


        请参见@webaldo。在我提到这一点时,这里他们给出了enter描述以及Asynctask和Thread之间的区别。我想知道在哪种情况下,例如网络连接、文件读取,我使用的是什么?。缩写:Thread