理解MeasureSpec widthMeasureSpec/heightMeasureSpec

在 onMeasure中的参数 heightMeasureSpec 又是什么?

MeasureSpec是父控件提供给子View的onMeaure参数,作为设定自身大小参考,只是个参考,要多大,还是View自己说了算。

MeasureSpec 是一个复合参数,包含了specMode和specSize,可以通过如下获取。

阅读更多

View的几个高度/宽度

自定义view的过程

onMeasure()–>onLayout()–>onDraw()

  • onMeasure() 计算当前各个子view的高宽度

  • onLayout() 确定各个子view在父容器的位置

阅读更多

丑数

我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

阅读更多

股票的最大利润

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

阅读更多

礼物的最大价值

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

阅读更多

重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

阅读更多

深入理解Handler原理

一. Handler初始化

Handler–> Looper <– MessageQueue <– Message


Handler需要Looper,Looperl里包含构建的MessageQueue。 可以在构造的时候,通过参数传入。

1. Handler 构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public Handler(Callback callback, boolean async) {

//检查潜在的泄漏
if (FIND_POTENTIAL_LEAKS) {
final Class<? extends Handler> klass = getClass();
if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
(klass.getModifiers() & Modifier.STATIC) == 0) {
Log.w(TAG, "The following Handler class should be static or leaks might occur: " +
klass.getCanonicalName());
}
}

//获取当前线程的Looper
mLooper = Looper.myLooper();
//Handler需要Looper,如果为null,抛出异常
if (mLooper == null) {
throw new RuntimeException(
"Can't create handler inside thread " + Thread.currentThread()
+ " that has not called Looper.prepare()");
}
//设置当前Handler的MessageQueue 等于Looper的MessageQueue
mQueue = mLooper.mQueue;
mCallback = callback;
mAsynchronous = async;
}
阅读更多

记一次类加载引起的Bug

1.起因

程序莫名其妙出了
error:java.lang.NullPointerException: Null reference used for synchronization (monitor-enter)
就是在使用同步锁的时候,是锁的对象是空的。很是奇怪,看代码没觉得啊。打印一下,确实是空的,Why?

阅读更多