这篇文章在线程之间通信部分说
如果新线程上的任务希望修改与主 UI 线程关联的视图,则该问题尤其严重,因为严格禁止直接这样做。
为什么禁止/禁止。
请阅读这个,
保持 UI 在 UI 线程上工作,非 UI 在非 UI 线程上工作始终是一个好习惯,因为 HoneyComb 是一个法律。我们总是从专用 UI 线程开始,但是一旦我们创建另一个线程来执行某些非 UI 任务,我们就会放弃专用 UI 线程,并降落在非 UI 线程上,一旦我们完成工作并且想把处理后的Output放到UI线程上,直接不行,因为我们丢失了对UI线程的引用。现在 Handler 有助于获取对创建它的线程的引用。因此,在 onCreate() 中初始化 Handler 是一个很好的做法,然后稍后从非 ui 线程中调用此引用。
Handler 帮助在 MessageQueue 中对来自工作线程的请求进行排队,以便它们在主线程上按顺序执行。
以下博客文章对于了解更多有关处理程序如何工作的信息非常有帮助:
使用android提供的AsyncTask<>,同步UI和Non-UI线程
AsyncTask<> 中的方法
doInBackground(String...) // 在非 UI 线程上工作
postExecute(String result) // 从非 Ui 线程获取输出和
将输出放回 UI 线程