1、view中为什么要加入post的方法
子线程是不能进行 UI 操作的,很多场景下,一些操作需要延迟执行,这些都可以通过 Handler 来解决。但是写 Handler 太麻烦了,一不小心又很容易写出内存泄漏的代码来,所以为了方便,就会用 View.post() or View.postDelay() 来代替 Handler 使用。
2、post的原理
View.post() 时,其实内部它自己分了两种情况处理,当 View 还没有 attachedToWindow 时,通过 View.post(Runnable) 传进来的 Runnable 操作都先被缓存在 HandlerActionQueue,然后等 View 的 dispatchAttachedToWindow() 被调用时,就通过 mAttachInfo.mHandler 来执行这些被缓存起来的 Runnable 操作。从这以后到 View 被 detachedFromWindow 这段期间,如果再次调用 View.post(Runnable) 的话,那么这些 Runnable 不用再缓存了,而是直接交给 mAttachInfo.mHanlder 来执行。