arvinljw
arvinljw
@Alex-Cin @Moosphan 大佬们,能不能看看回答的哪些地方需要完善或者有问题的呢? ## Android消息机制和原理 **1.Looper.loop()和MessageQueue.next()取延时消息时,都在主线程中使用了死循环为什么不会卡死?** 答:因为在MessageQueue在取消息时,如果是延时消息就会计算得到该延时消息还需要延时多久nextPollTimeoutMillis。然后再继续循环的时候,发现nextPollTimeoutMillis不等于0,就会执行nativePollOnce阻塞线程nextPollTimeoutMillis毫秒,而阻塞了之后被唤醒的时机就是阻塞的时间到了或者又有新的消息添加进来执行enqueueMessage方法调用nativeWake唤醒阻塞线程,再继续执行获取消息的代码,如果有消息就返回,如果还是需要延时就继续和上边一样阻塞。而Android所有的事件要在主线程中改变的都会通过主线程的Handler发送消息处理,所以就完全保证了不会卡死。 其中nativePollOnce的的位置也有考究,刚好在synchronized的外边,所以在阻塞的时候也能保证添加消息是可以执行的,而取消息时添加消息就需要等待。 nativePollOnce和nativeWake都是底层方法,调用链: * nativePollOnce --> android\_os\_MessageQueue.pollOnce --> Looper.pollOnce --> Looper.pollInner --> epoll_wait实现阻塞;epoll\_wait是linux方法就是进行阻塞一段时间,返回的eventCount如果出错或者超时就会执行goto Done处,或者有事件发生就继续执行如果fd是mWakeEventFd就唤醒。 * nativeWake --> android\_os\_MessageQueue.wake --> Looper.wake 实现唤醒。 *对于wake方法里如何实现唤醒还需要再学习,目前看不懂* **2.MessageQueue是队列吗?它是什么数据结构?** 答:MessageQueue不是队列,它内部使用一个Message链表实现消息的存和取。...
这个好像确实存在,有没有什么好的处理方案呢?
这个是为了达到那个shining,散开的效果。
你可以看一下图片的真实大小,比如xhdpi 里边是40x40的,是mdpi的两倍,而mdpi中对应的大小就是1dp等于1px,所以这里就是可以知道他的大小是20dp。
qq:1035407623 提示了收藏不成功,在我的收藏里就应该不会有收藏。为什么会收藏不成功呢?有一点是有问题的,就是在我的收藏列表里没有返回是否收藏,所以进到详情页去之后就没有拿到正确的收藏状态,就有问题。
之前就有这个打算了,会在最近升级,升级之后通知你。
会有比较大的提升的,当时这样做,只考虑了去直接操控bitmap,没有换种思路。谢谢你的建议。
这两个的效果没有同步,是单独的。
目前确实存在这个问题。快速点击的话,动画执行完,就有可能是同步调用修改数量方法,就会出现这种问题,解决办法想着是加锁,但是不知道会不会卡顿。
在包含这两个View的ViewGroup上加上属性`android:clipChildren="false"`试试。