Очень хорошо, у меня есть вопрос, связанный с тем, когда я должен использовать (или почему) Activity.runOnUiThread() вместо или наоборот Handler.post(Runnable) для обновления, например, TextView или ProgressBar , или если это не удается , я должен использовать Asyntask .
Я искал информацию по следующим ссылкам, но у меня до сих пор нет четкого ответа. Каков наилучший вариант в каждом конкретном случае?
Android: в чем разница между Activity.runOnUiThread и View.post?
runOnUiThread vs Handler.post (работающее действие)?
Разница между Handler.post(Runnable r) и Activity.runOnUiThread(Runnable r)
Разница между
Activity.runOnUiThread()
иHandler.post(Runnable r)
в том, чтоrunOnUiThread
только выполняет конкретное действие из потока , который вы выполняете над представлением (компонентом, будь то TextView или другим) основного потока , то есть компонентом вашего приложения.Handler.post(Runnable r) в основном служит той же цели, но есть небольшое отличие, заключающееся в том, что с помощью Handler.post() вы можете получить доступ к компонентам или переменным других потоков, а не только к основному потоку , как с
runOnUiThread
.Если вы хотите изменить только компонент основного потока, я рекомендую вам использовать его
runOnUiThread()
, так как у вас не будет проблем.Пример использования
runOnUiThread()
:Пример использования
Handler.post(Runnable r)
:Другое дело использовать
AsyncTask
, у которого есть специфические методы, чтобы иметь возможность создавать действия в основном потоке, но не иметь доступа к его компонентам, например,AsycnTask
можно использовать его методы для создания диалога с панелью процессов и воздействовать на него , но не сможет получить доступTextView
к основному потоку.привожу пример:
Надеюсь, я помог вам с вашим вопросом. Если у вас есть какие-либо другие вопросы или вы не понимаете что-то, что я объясняю, пожалуйста, оставьте мне комментарий, и я объясню это для вас.
Удачи!!