2011-05-25 18 views
0

我正在研究一個內部應用程序,該應用程序在時間線上顯示給定會議室的每日安排。每一分鐘,我都會訪問一個Web服務並獲取有關當天所有約會的信息,然後使用這些數據創建自定義的「時間線塊」視圖,以顯示會議時間,客戶等。然後,刪除所有約會從時間線上更新並用新數據進行刷新。我使用的自定義視圖只包含一個帶有3個TextView的LinearLayout。我想我應該注意到,活動的佈局非常複雜,有些視圖嵌套了大約7層深。android.text.Styled.drawDirectionalRun中的ClassCastException

一切運行良好大約2-3天,然後該應用程序將崩潰。我這樣做是爲了讓它每隔3秒就會觸發一次Web服務,現在每2.5小時就會發生一次崩潰。得到我的是拋出的異常甚至不指向我的代碼中的任何東西。例外的是以下:

FATAL EXCEPTION: main 
java.lang.ClassCastException: java.lang.String 
    at android.text.Styled.drawDirectionalRun(Styled.java:283) 
    at android.text.Styled.measureText(Styled.java:430) 
    at android.text.Layout.measureText(Layout.java:1655) 
    at android.text.Layout.getLineMax(Layout.java:689) 
    at android.text.Layout.getLineWidth(Layout.java:671) 
    at android.widget.TextView.desired(TextView.java:5037) 
    at android.widget.TextView.onMeasure(TextView.java:5083) 
    at android.view.View.measure(View.java:8171) 
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578) 
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362) 
    at android.view.View.measure(View.java:8171) 
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578) 
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362) 
    at android.view.View.measure(View.java:8171) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
    at android.view.View.measure(View.java:8171) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
    at android.view.View.measure(View.java:8171) 
    at android.view.ViewRoot.performTraversals(ViewRoot.java:801) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4627) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
    at dalvik.system.NativeStart.main(Native Method) 

如果我錯誤地鑄造一個String(我敢肯定我不是),是怎麼回事,它不會被抓住,直到它是深藏在本地代碼?我在這裏不知所措。這可能是一個內部的Android錯誤嗎?

另一件可能有用的事情:另一次當這個應用程序崩潰時,它給出了相同的ClassCastException,但在不同的地方。它發生在BoringLayout.isBoring函數中,這也是我的代碼中永遠不會觸及的東西。

回答

0

所以,事實證明,這個問題一直是Android的處置字樣對象(不正確)時出現內存泄漏。我正在爲每個文本標籤創建一個新的TypeFace,並且隨着時間線更新,時間線塊每分鐘都會重新填充。

解決方案是創建可重用的TypeFaces,以便它們可以全局訪問。我把它們放在Application類中,因爲我的所有活動都可以訪問它。這樣Android只需要處理一些對象而不是幾百個。它當然不能解決內部問題,但它是一種解決方法。這個問題可能是由ICS修正的,但我不確定。

0

您R.layout.standings_layout一定要多多LinearLayouts內其他

+1

我其實早就想出了這個,忘了回答。我現在會這樣做。 – BigFwoosh 2012-01-30 19:44:42