StackOverflowError與text層級導(dǎo)致的crash

我們的新版本在神機(三星G9100,Android4.0.4)上出現(xiàn)了一個必現(xiàn)的crash,拉取某一個訂閱源的時候會出現(xiàn)閃退。
logcat拿到的日志顯示:

E/AndroidRuntime: FATAL EXCEPTION: main
                   java.lang.StackOverflowError
                                                       at java.lang.reflect.Array.newInstance(Array.java:448)
                                                       at android.text.SpannableStringInternal.getSpans(SpannableStringInternal.java:272)
                                                       at android.text.SpannedString.getSpans(SpannedString.java:25)
                                                       at android.text.Layout$SpannedEllipsizer.getSpans(Layout.java:1790)
                                                       at android.text.TextLine$SpanSet.init(TextLine.java:878)
                                                       at android.text.TextLine.handleRun(TextLine.java:976)
                                                       at android.text.TextLine.drawRun(TextLine.java:397)
                                                       at android.text.TextLine.draw(TextLine.java:195)
                                                       at android.text.Layout.draw(Layout.java:425)
                                                       at android.widget.TextView.onDraw(TextView.java:5262)
                                                       at android.view.View.draw(View.java:11159)
                                                       at android.view.View.getDisplayList(View.java:10598)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.draw(View.java:11162)
                                                       at android.view.View.getDisplayList(View.java:10598)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.widget.ListView.drawChild(ListView.java:3231)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.widget.AbsListView.dispatchDraw(AbsListView.java:2281)
                                                       at android.widget.ListView.dispatchDraw(ListView.java:3226)
                                                       at com.netease.pris.activity.view.pullrefresh.PullToRefreshListView$InternalListView.dispatchDraw(PullToRefreshListView.java:312)
                                                       at android.view.View.draw(View.java:11162)
                                                       at android.widget.AbsListView.draw(AbsListView.java:3764)
                                                       at android.view.View.getDisplayList(View.java:10598)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.draw(View.java:11162)
                                                       at android.view.View.getDisplayList(View.java:10598)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.draw(View.java:11162)
                                                       at android.view.View.getDisplayList(View.java:10598)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.draw(View.java:11162)
                                                       at android.support.v4.view.ViewPager.draw(ViewPager.java:2262)
                                                       at android.view.View.getDisplayList(View.java:10598)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.getDisplayList(View.java:10596)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:2858)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2497)
                                                       at android.view.View.draw(View.java:11162)
                                                       at android.support.v4.view.ViewPager.draw(ViewPager.java:2262)
                                                    at android.

從前幾行來看,應(yīng)該是文本控件text的問題。textView:本身就有2層,如果在textView中用了SpannableStringBuilder,就會變成4層。層級太深導(dǎo)致的堆棧溢出,進(jìn)而產(chǎn)生crash。
原先用Spannable實現(xiàn)的效果改為setCompoundDrawablesWithIntrinsicBounds實現(xiàn),也就是:title.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容