2010-09-13 4 views
1

Je me bats dans un de mes services depuis un certain temps déjà. Il est très difficile à reproduire et l'interface utilisateur semble avoir une fonctionnalité complète juste avant qu'il ne se produise 100% du temps il n'y a jamais de retard notable ou de gel. Mon service a un TimerTask et quelques AsyncTask qu'il exécute et c'est tout. Les traces de pile que je reçois lorsque vous le signalez avec l'Android Market en 2.2 sont difficiles à lire, il ne semble pas y avoir de référence à aucun de mes codes directement, mais uniquement à partir des classes du SDK. Quelqu'un peut-il jeter un oeil à la pile et voir si vous pouvez dire ce qui se passe.Aide à la lecture des traces de pile ANR sous Android

L'impression est si grande que j'ai opté pour l'afficher sur pastebin, j'espère que ce n'est pas contre les règles. http://pastebin.com/KHUD0UHW

Voici le journal de Logcat ainsi http://pastebin.com/V5xSey36

+0

Le thread principal est en bas dans la hiérarchie de vue mettant à jour l'écran. Avez-vous les données ANR de logcat? – fadden

+0

l'a ajouté ci-dessus. – schwiz

+0

J'ai remarqué que la dernière chose que faisait Main consistait à dessiner un bitmapDrawable sur un canevas. Qu'y a-t-il à dessiner ce bitmap qui pourrait bloquer le thread principal? Quelles méthodes utilisez-vous pour remplir vos vues avec des images? – magaio

Répondre

5

Il est possible que ce n'est pas votre faute d'applications. Un ANR apparaît pour l'application 'actuelle'. Cependant, si une autre application sur le système supprimait réellement votre processeur et forçait votre application à mourir de faim, votre application obtiendrait l'ANR parce qu'elle était centrée sur l'utilisateur. Si telle est la situation, vous ne pouvez rien faire. Peut-être la meilleure façon de tester cela est de surveiller ou de forcer le système à faire une synchronisation. Les synchronisations sont généralement assez lourdes sur le téléphone et peuvent causer un mauvais décalage sur les téléphones moins puissants.

Une autre façon de tester si vous avez un téléphone plus lent est d'installer une grosse application sur le marché. Une fois qu'il est entré dans la phase 'Installation' après le téléchargement, faites quelque chose d'un peu intensif dans votre application. Si la phase d'installation dure plus de 5 secondes, il a une chance décente de faire en sorte que votre application reçoive l'ANR. C'est à cause de mauvaises vitesses d'E/S lors de l'installation de l'application. IO bloque les autres applications pour obtenir du temps CPU. Android pense que cela signifie que vous le volez.

Questions connexes