2016-06-22 5 views
0

Я пытаюсь реализовать простое клиентское серверное приложение с помощью Android Studio. Я понял ограничения Android, связанные с тем, что основной поток пользовательского интерфейса не способен обрабатывать сетевой код, а поток не может ссылаться на основной поток.Android Thread Classes

Тем не менее, я не знаю, какой метод использовать для запуска сетевых команд (например, send OutputStream и/или InputStream). У меня есть два общих вопроса.

  1. Должен ли я использовать рабочую нить (Runnable или что-то еще) или использовать AsyncTask?

  2. Какой из них лучше и при каких обстоятельствах?

Благодаря

ответ

0

AsyncTask обеспечивает правильное и простое использование нити пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке 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) 
0

От AsyncTaskdocumentation:

Когда впервые, AsyncTasks были выполнены поочередно на одном фоновом потоке. Начиная с DONUT, это было изменено на пул потоков, позволяющий нескольким задачам работать параллельно. Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать ошибок обычного приложения, вызванных параллельным выполнением.

ли AsyncTask в настоящее время повторно использует один и тот же фоновый поток (т.е., если он использует фиксированный пул потоков размера 1) является немного расплывчатым. Это вопрос, на который можно ответить, глядя в источник AsyncTask. Но даже если это не сейчас, это возможно в будущем. Если вы используете AsyncTask, ваш код автоматически выиграет от будущих изменений и улучшений. Это само по себе достаточно, чтобы использовать AsyncTask, даже если вам не нужны другие удобства, которые он приносит.

+0

Именно то, что я искал. большое спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^