Android???TextView???????????
???????????? ???????[ 2013/5/16 10:28:29 ] ????????
????????widthMeasureSpec??heightMeasureSpec??????????????????淶????????淶???????淶??????int???????????int?????????????????
???????????mode??????????2λ?????????????????????????MeasureSpec.UNSPECIFIED(0)??MeasureSpec.EXACTLY(1)????MeasureSpec.AT_MOST(2)??
???????????size??????????30λ?????????mode????????MeasureSpec.EXACTLY???size?????????????????????????????????;??mode????????MeasureSpec.AT_MOST???size???????????????????????????????????????;??mode????????MeasureSpec.UNSPECIFIED????????????????????????????????????????????????????????????????????????
????TextView?????????onMeasure???????????????????????wdith????height????????????????View???????????????setMeasuredDimension??????????????????????????????????ú??????y???????????????????IllegalStateException??????
????2. ????
????????????????????????????????С??????????λ???δ??????????λ?????????????????????????
????????????????????????ν??????????????У???????λ???????????????????????????????????????в?????????????????д????View????????onLayout?????????Activity??????????????????????????????DecorView???????????????????Activity??????????????????????????е?????????????????????????????????????onLayout???????л???????????????λ?y?????????????????
?????????????FrameLayout??LinearLayout??RelativeLayout??TableLayout??AbsoluteLayout??????????????????????????????????д????View????????onLayout??????TextView??????????????????????????????д????View????????onLayout??
????3. ????
???????????????????????????λ????С??????????????????????????UI???л????????????????????????UI?????????д????View????????onDraw??
????TextView?????????onDraw??????????????
????[java] view plaincopyprint?
????public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
????......
????@Override
????protected void onDraw(Canvas canvas) {
????//?????canvas?????UI
????......
????}
????......
????}
????public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
????......
????@Override
????protected void onDraw(Canvas canvas) {
????//?????canvas?????UI
????......
????}
????......
????}
????????????????????frameworks/base/core/java/android/widget/TextView.java?С?
????????canvas??????????黭?????????UI?????????黭???????????????????????????UI?????續(xù)??(drawLine)?????(drawCircle)?????(drawBitmap)??????????ЩUI??????????????????????????????UI???
?????????Android??ó?????(Activity)?????(Measure)??????(Layout)?????(Draw)??????????????????Java???Canvas???????????C++???SkCanvas??C++???SkCanvas??????????λ????????????λ????????????????(Surface)??????????λ???????
?????????Android??ó?????SurfaceFlinger??????????????????????????????????????????????????λ?????????????????????????棬????SurfaceFlinger???????????SurfaceFlinger?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????UI?????????????????????????????UI????з??????????????????????????UI??????????λ??????????
?????????Android??????????WindowManagerService??????????????????????????????UI???????WindowManagerService??????????????????????????п????????????????UI??????????WindowManagerService?????????Binder?????????????WindowManagerService???????????Binder??????????????????????SurfaceFlinger????????????????UI??SurfaceFlinger??????′???UI????????ο????Android??Surface?????SurfaceFlinger?????????ó???UI????????????
?????????????????????????????UI???????????????????л?????????????????????????????????ó???????WindowManagerService?????SurfaceFlinger??????????????????????
?????????????????Android??ó?????(Activity)?????(Measure)??????(Layout)?????(Draw)?????????????????ó??????????????
????(1). ???????????п????UI????????????????????????????????????????п????UI?????????д????????λ???????;
????(2). ???????????п????UI?????????????????????е??????????????UI????????????????????????????У??????????????????????CalledFromWrongThreadException????????
?????????漲??????UI???????????????????????????????????????Щ??UI??????????漰??????????????????????????????????棬???????????????????????????????????????????????λ????????????????????Щ??UI???????????????????????е??????????漰???????????????????????????????????????Щ??UI??????????????????????С???????????UI????????????????ó?????????????????????????ó??????????????UI????
???????????????ó???????????????????????UI????????????????????????????????????????????????к?????UI????????????????????????ó?????????????????????????????????ANR?????
?????????????а????????????UI???ж???????λ??????????????????????????UI??????????????????????????????λ???????????????????????????????????????????????????л????????UI????????????????????——??????????????????????????????UI?????????????????????????????????????????????????????????????У?????????????????ж?????λ?????????——SurfaceView??
??????
![](/images/ad-banner/ad-banner.png)
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11