1. 程式人生 > >Android4.4 TextView跑馬燈卡頓問題

Android4.4 TextView跑馬燈卡頓問題

前段時間在維護Android系統的時候,遇到TextView,一旦添加了跑馬燈後,UI就出現卡頓的情況。針對這個情況,對Android TextView的原始碼進行了一系列的分析和測試,最終找到了原因,如下:


在建構函式裡面的一段程式碼
修改前:
public TextView(Context context, AttributeSet attrs, int defStyle) {
    ......
      switch (ellipsize) {
            case 1:
                setEllipsize(TextUtils.TruncateAt.START);
                break;
            case 2:
                setEllipsize(TextUtils.TruncateAt.MIDDLE);
                break;
            case 3:
                setEllipsize(TextUtils.TruncateAt.END);
                break;
            case 4:
                if (ViewConfiguration.get(context).isFadingMarqueeEnabled()) {
                    setHorizontalFadingEdgeEnabled(true);
                    mMarqueeFadeMode = MARQUEE_FADE_NORMAL;
                } else {
                    setHorizontalFadingEdgeEnabled(false);
                    mMarqueeFadeMode = MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;
                }
                setEllipsize(TextUtils.TruncateAt.MARQUEE);
                break;
        }
    ......
}

修改後:

public TextView(Context context, AttributeSet attrs, int defStyle) {
    ......
      switch (ellipsize) {
            case 1:
                setEllipsize(TextUtils.TruncateAt.START);
                break;
            case 2:
                setEllipsize(TextUtils.TruncateAt.MIDDLE);
                break;
            case 3:
                setEllipsize(TextUtils.TruncateAt.END);
                break;
            case 4:
                /*if (ViewConfiguration.get(context).isFadingMarqueeEnabled()) {
                    setHorizontalFadingEdgeEnabled(true);
                    mMarqueeFadeMode = MARQUEE_FADE_NORMAL;
                } else {
                    setHorizontalFadingEdgeEnabled(false);
                    mMarqueeFadeMode = MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;
                }*/
                setEllipsize(TextUtils.TruncateAt.MARQUEE);
                break;
        }
    ......
}

總結:
      註釋掉的地方的功能是TextView左右的陰影部分,註釋掉後,跑馬燈左右沒有陰影效果,所以也不算是根治此問題,只能夠說變相的優化了。但是我對比過要不要陰影的效果,不特別去注意的話是看不出有什麼不同的。Android4.4繪製UI感覺是有些問問題,在Server使用WindowManager畫UI的時候,明顯比Android5.0以上卡很多,具體原因沒有過多去跟了,有繼續往下跟的大神,找到原因了的話,可以分享一下,感謝!