[Android]View的Handler机制
1个回答
展开全部
有一定开发经验,大家应该对Handler的机制有非常深刻的了解,Handler在Android开发中被广泛用于线程间通信。
近来遇到了一个问题,在view init的情况下使用view自身的handler会崩溃,但是直接使用postDelay却能正常运行。
这里需要思考几个问题
1.view的handler是从哪里来的呢?
2.view的handler为何会崩溃?
3.View的post的运行机制是?
读了这篇文章,你就能理解到这些问题
可以看到是handler是从mAttachInfo过来的.
在dispatchAttachedToWindow的时候来传递过来,而viewgroup中触发这个传递操作。
这里最终会在ViewRootImpl中创建出来AttachInfo对象。
而handler是来自于自定义的ViewRootHandler,那就可以知道,整个Activity的View系统共用一个Handler是由ViewRootImpl创建,用于处理页面视图事件等处理。
dispatchAttachedToWindow是在View调用init初始化之后的,handler还没有被初始化,所以就导致handler返回null对象出外,如果不判空就会崩溃了。
可以看到当mAttachInfo未初始化的时候,会先将runnable塞到一个队列当中。
当view被绑定到窗口的时候,会将队列和handler绑定,然后启动队列任务
近来遇到了一个问题,在view init的情况下使用view自身的handler会崩溃,但是直接使用postDelay却能正常运行。
这里需要思考几个问题
1.view的handler是从哪里来的呢?
2.view的handler为何会崩溃?
3.View的post的运行机制是?
读了这篇文章,你就能理解到这些问题
可以看到是handler是从mAttachInfo过来的.
在dispatchAttachedToWindow的时候来传递过来,而viewgroup中触发这个传递操作。
这里最终会在ViewRootImpl中创建出来AttachInfo对象。
而handler是来自于自定义的ViewRootHandler,那就可以知道,整个Activity的View系统共用一个Handler是由ViewRootImpl创建,用于处理页面视图事件等处理。
dispatchAttachedToWindow是在View调用init初始化之后的,handler还没有被初始化,所以就导致handler返回null对象出外,如果不判空就会崩溃了。
可以看到当mAttachInfo未初始化的时候,会先将runnable塞到一个队列当中。
当view被绑定到窗口的时候,会将队列和handler绑定,然后启动队列任务
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询