我正在尝试使用Android Studio实现一个简单的客户端服务器应用程序。我理解有关主UI线程的Android限制无法处理网络代码和线程无法引用主线程。
但是,我不确定使用哪种方法来运行与网络相关的命令(即发送OutputStream或/和InputStream)。我有两个通用问题。
我应该使用工作线程(Runnable或其他东西)还是使用AsyncTask?
哪一个更好,在哪种情况下?
由于
答案 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)