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以上卡很多,具體原因沒有過多去跟了,有繼續往下跟的大神,找到原因了的話,可以分享一下,感謝!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容