2010-05-28 3 views
2

On m'a dit que Android OS stocke tous les appels de fonction dans une pile. Cela peut conduire à de nombreux problèmes et causer le «hoquet» pendant l'exécution, même si un programme est fonctionnalisé correctement, correct? Donc, la question est, comment pouvons-nous empêcher cela de se produire? La solution évidente est de moins fonctionnaliser, avec d'autres actions sensibles telles que s'abstenir de créer des objets excessivement/inutilement, effectuer des appels statiques à des fonctions qui n'accèdent pas aux champs, etc ...Comment optimiser le code de l'application Android en fonction de la pile d'appels de fonction?

Y a-t-il un autre moyen? Ou cela peut-il seulement être fait par une écriture soigneuse de code de la part des programmeurs? La JVM/JIT optimise-t-elle automatiquement le bytecode lors de la compilation pour en tenir compte?

Merci beaucoup pour vos réponses !!

+0

Question intéressante. Gardez à l'esprit que les appareils Android n'exécutent pas Java Bytecode. Java est compilé dans un exécutable Dalvik (qui, contrairement à Java, est basé sur une architecture de registre plutôt que sur Stack). –

Répondre

3

On m'a dit que Android OS stocke tous les appels de fonction dans une pile

C'est la façon de travailler à peu près tous les langages de programmation, et qui a été le cas pendant 30 ou 40 ans .

Cela peut conduire à de nombreux problèmes et provoquer les « accrocs » au cours de l'exécution, même si un programme est fonctionnalisés correctement, correct?

Non, mais cela peut entraîner des exceptions si vous manquez d'espace de pile.

La question est, comment pouvons-nous empêcher que cela se produise?

Comment pouvez-vous empêcher de se produire?

Le coupable n ° 1 pour manquer d'espace de pile est trop hiérarchisé. Utilisez hierarchyviewer pour examiner votre activité et comptez combien de niveaux dans la hiérarchie de votre vue, de PhoneWindow$DecorView jusqu'au nœud feuille le plus éloigné. Si vous arrivez à environ 15, vous risquez de manquer d'espace de pile. Dans ce cas, simplifiez votre interface utilisateur, par exemple en remplaçant LinearLayouts par un RelativeLayout.

Questions connexes