工作中遇到的坑(二)

为什么Service和Activity都运行在主线程却无法确定其运行线程呢?

    因为有MessageQueue的存在,线程都是按在添加到MessageQueue的时间来顺序执行代码块。所以Service和Activity即使在同一个线程,因为事件加入时机不同,两者之间的执行顺序也不同,只能保证Activity内部和Service内部是顺序的,外部顺序不一定。

getAdapterPosition和getLayoutPosition的区别

OnBindViewHolder中的position不能直接传入onItemClickListenter中,最好用getAdapterPosition

getLayoutPosition和getAdapterPosition(比较极端情况下才会出问题,比如用户手机卡,疯狂点击)

具体区别就是adapter和layout的位置会有时间差(<16ms), 如果你改变了Adapter的数据然后刷新视图, layout需要过一段时间才会更新视图, 在这段时间里面, 这两个方法返回的position会不一样.

另外答案还提到, 在notifyDataSetChanged之后并不能马上获取Adapter中的position, 要等布局结束之后才能获取到.

而对于Layout的position, 在notifyItemInserted之后, Layout不能马上获取到新的position, 因为布局还没更新(需要<16ms的时间刷新视图), 所以只能获取到旧的, 但是Adapter中的position就可以马上获取到最新的position.

资源依赖问题:

如果B 依赖A,且AB都一个同名的资源,那么B使用的是A的资源,

一定要改成不同的名字

子线程刷新UI:

有时候在子线程刷新了UI并不会崩溃,例如Adapter.notify,但是界面会显示异常(例如需要划一下界面才会显示等),

1.需要检查Adapter.notify

2.图片加载

3.网络请求

个人Github:https://github.com/FortuneDream 

欢迎Star

你可能感兴趣的:(工作中遇到的坑(二))