2011-05-25 4 views
0

Je travaille sur une application interne qui affiche l'emploi du temps quotidien pour une salle de conférence donnée sur une timeline. Chaque minute, je consulte un service Web et je reçois des informations pour tous les rendez-vous de la journée, et j'utilise ces données pour créer des vues personnalisées «bloc temporel» indiquant l'heure de la réunion, le client, etc. à partir de la chronologie et l'actualiser avec les nouvelles données. Les vues personnalisées que j'utilise ne consistent en rien d'autre qu'une LinearLayout avec 3 TextViews à l'intérieur. Je suppose que je devrais noter que la disposition pour l'activité est assez complexe, et certaines vues sont imbriquées sur 7 couches profondes.ClassCastException dans android.text.Styled.drawDirectionalRun

Tout fonctionne très bien pendant environ 2-3 jours, puis l'application va planter. Je l'ai fait pour que le service Web atteigne toutes les 3 secondes, et maintenant le crash se produira toutes les 2,5 heures. Ce qui m'arrive c'est que l'exception qui est lancée ne pointe même pas sur quoi que ce soit dans mon code. Exception est ci-dessous:

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) 

Si je suis coulée de manière incorrecte une chaîne (que je suis sûr que je ne suis pas), comment est-ce que ce ne serait pas pris jusqu'à ce qu'il soit profond que dans le code natif? Je suis à perte ici. Est-il possible que ce soit un bug Android interne?

Une autre chose qui pourrait aider: une autre fois que cette application a planté, il a donné la même ClassCastException, mais dans un endroit différent. C'est arrivé dans la fonction BoringLayout.isBoring, qui est aussi quelque chose qui n'est jamais touché dans mon code.

Répondre

0

Ainsi, il se trouve que le problème était tout le long que les fuites Android mémoire lors de l'élimination (mal) des objets TypeFace. Je créais un nouveau TypeFace pour chaque étiquette de texte, et chaque minute, les blocs temporels étaient repeuplés au fur et à mesure de la mise à jour du scénario.

La solution consiste à créer les TypeFaces qui sont réutilisés afin qu'ils soient globalement accessibles. Je les mets dans la classe Application car toutes mes activités peuvent y accéder. De cette façon, Android doit seulement disposer de quelques objets au lieu de centaines. Cela ne règle pas le problème interne bien sûr, mais c'est une solution de contournement. Le problème peut être résolu à partir de ICS, mais je ne suis pas sûr.

0

votre R.layout.standings_layout doit être beaucoup de LinearLayouts dans l'autre

+1

J'ai effectivement compris cela il ya quelque temps et j'ai oublié d'y répondre. Je vais le faire maintenant. – BigFwoosh