2017/10/05 明天就回去了..

明天就回上海了,今天多陪陪家人,今天简单复习了Android的消息机制


1.大概流程为,UI线程在最开始创建的时候就创建了一个Looper对象,在Looper的构造方法中,同时会创建一个Messagequeque这样的链表结构的队列,Looper会调用Loop方法不断的去队列中提取消息,然后回调我们在Handler中实现的方法,那么塞入队列的载体是Message对象,塞数据是通过Handler的sendMessage方法。

   另外Handler的post方法实际上也是调用了sendMessage方法,Runnable也只是作为一个作为回调的参数传入。

   Handler导致的内存泄漏,由于非静态内部类会默认隐式持有外部累的实例,而且Looper的生命周期是跟整个应用的生命周期是相同的,这样有一种情况就是使用Handler的Activity的生命周期结束之后,它的实例被外部持有,假如Handler中进行了类似网络访问之类的耗时操作,在这个操作完成之前,Java的GC回收就不会去回收这部分内存,至此便造成了内存泄漏。至于解决方法,我们可以创建静态Handler,并且在我们Activity的OnDestory生命周期中进行removeCallBack,removeMessage之类的操作,以此来避免内存泄漏。


危机感造成的焦虑虽然让我很难受,却也比安逸的生活让我停滞不前要强得多,我必须加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值