Android线程类

时间:2016-06-22 18:31:18

标签: android multithreading android-asynctask runnable

我正在尝试使用Android Studio实现一个简单的客户端服务器应用程序。我理解有关主UI线程的Android限制无法处理网络代码和线程无法引用主线程。

但是,我不确定使用哪种方法来运行与网络相关的命令(即发送OutputStream或/和InputStream)。我有两个通用问题。

  1. 我应该使用工作线程(Runnable或其他东西)还是使用AsyncTask?

  2. 哪一个更好,在哪种情况下?

  3. 由于

2 个答案:

答案 0 :(得分:0)

来自AsyncTask documentation

  

首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。

AsyncTask当前是否重新使用相同的后台线程(即,如果它使用大小为1的固定线程池)有点模糊。这是一个可以通过查看AsyncTask来源来回答的问题。但即使它现在不是 ,也可能在未来。如果您使用AsyncTask,您的代码将自动受益于未来的更改和改进。仅这一点就足以使用AsyncTask,即使您不需要它带来的其他便利。

答案 1 :(得分:0)

  

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

     

AsyncTask将经历以下4个阶段:

onPreExecute()

Invoked on the UI thread before the task is executed

doInbackground(Params..)

Invoked on the background thread immediately after onPreExecute() finishes executing.

onProgressUpdate(Progress..)

Invoked on the UI thread after a call to publishProgress(Progress...).

onPostExecute(Result)