1.为什么不能在子线程做UI绘制
简单的说,ViewRootImpl对象生成之后,就不能在子线程操作UI,某些可以绕过checkThread方法(skipInvalidate方法判定为true)的特例除外,在ViewRootImpl对象生成之前,比如在onCreate方法里,还是在子线程可以操作UI的。
https://juejin.im/post/5d4176365188255d8919be91
https://www.jianshu.com/p/4f158c81e22e
2.equals和hashcode方法(为什么重写equals方法一定要重写hashcode方法)
https://blog.csdn.net/qq_37856300/article/details/88813842
https://blog.csdn.net/qing_gee/article/details/104569177
可能有读者会问:“一定要同时重写 equals() 和 hashCode() 吗?”
回答当然是否定的。如果对象作为键在哈希表中,那么两个方法都要重写,因为 put 和 get 的时候需要用到哈希码和 equals() 方法;
如果对象不在哈希表中,仅用来判断是否相等,那么重写 equals() 就行了。
在 Java API 文档中关于 hashCode 方法有以下几点规定(原文来自 java 深入解析一书):
1、在 java 应用程序执行期间,如果在 equals 方法比较中所用的信息没有被修改,那么在同一个对象上多次调用 hashCode 方法时必须一致地返回相同的整数。
2、如果两个对象通过调用 equals 方法是相等的,那么这两个对象调用 hashCode方法必须返回相同的整数。
3、如果两个对象通过调用 equals 方法是不相等的,不要求这两个对象调用hashCode 方法必须返回不同的整数。但是程序员应该意识到对不同的对象产生不同的 hash 值可以提高哈希表的性能。
网友评论