5

В моем приложении у меня есть кнопки, при нажатии они будут запрашивать базу данных и показывать результат на экране. Действие запроса обычно занимает 1 ~ 3 секунды. Эти кнопки будут нажиматься очень часто.Android - Разница между Thread и AsyncTask?

Я реализовал это действие как для AsyncTask, так и для Thread, но вижу очень мало разных.

Однако в долгосрочной перспективе, особенно когда кнопки нажимаются много раз, что будет более выгодным с точки зрения ресурсов (ЦП, памяти)?

+0

AsyncTaskloader - это мое предположение: http://stackoverflow.com/a/20279805/2413303 – EpicPandaForce

+0

Спасибо за ваш повтор EpicPandaForce. Я прочитал ссылку. Они сказали: «AsyncTaskLoader может выжить через изменения конфигурации, такие как экраны экрана». Но запрос короткий, нужно ли также обрабатывать изменения конфигурации? –

+0

@ngubk, необходимо обрабатывать конфигурационные изменения почти во всех случаях – localhost

ответ

5

При использовании Thread, вам необходимо обновить результат на главном потоке с использованием метода runOnUiThread(), в то время как AsyncTask имеет onPostExecute() метод, который автоматически выполняет в основном потоке после doInBackground() возвращается.

Пока нет существенной разницы между этими двумя с точки зрения «который является более выгодным», я думаю, что AsyncTask абстракция была разработана так, что программист не должен синхронизировать рабочие потоки UI &. При использовании Thread это может быть не всегда так просто, как вызов runOnUiThread(); он может стать очень сложным очень быстро. Поэтому, если бы я был вами, я бы использовал AsyncTask и оставил Thread для более специализированных ситуаций.

+0

Спасибо за ваш ответ. Но в моем случае я использую handler.sendMessage() в потоке вместо runOnUiThread(), это хорошо или AsyncTask все же лучше? –

+0

Вы используете 'Thread' или' Hander'? –

+0

Моя реализация очень похожа на этот ответ: http://stackoverflow.com/questions/13954611/android-when-should-i-use-a-handler-and-when-should-i-use-a-thread –

1

AsyncTask Используется для выполнения некоторых фоновых вычислений и публикации результата в потоке пользовательского интерфейса (с дополнительными обновлениями обновлений). Поскольку вас не интересует пользовательский интерфейс, то более подходящим является Handler или Thread.

Ссылка: Handler vs AsyncTask vs Thread

+2

не касается пользовательского интерфейса? Он говорит, что он должен отображать результаты на экране. –

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