Η ανάπτυξη είναι μια δύσκολη επιχείρηση. Ο στόχος συνεχίζει να κινείται, νέες τεχνολογίες και τομείς ζωντανεύουν περιοδικά, νέα εργαλεία αναδύονται συνεχώς και Γλώσσες αλλαγή σε αυτό που φαίνεται να διαχειρίζεται τον όλεθρο.
Ωστόσο, ακόμη και με όλες αυτές τις αλλαγές, οι θεμελιώδεις κανόνες παραμένουν οι ίδιοι. Ένας από τους πιο σημαντικούς από αυτούς τους βασικούς κανόνες δηλώνει ότι για να δημιουργήσετε πραγματικά φοβερό λογισμικό, πρέπει να αποκτήσετε βαθιά, συνεχή και λεπτομερή ενδοσκόπηση στο εκτελεστικό σας σύστημα. Διαγνωστικά , εντοπισμός σφαλμάτων , και δημιουργία προφίλ είναι όροι που μερικές φορές χρησιμοποιούνται σε αυτό το πλαίσιο, αλλά ο κανόνας πηγαίνει βαθύτερα. Ένας κορυφαίος προγραμματιστής «αισθάνεται» κυριολεκτικά το σύστημά του. Ξέρει τι θα προκαλέσει είναι να περιμένει περισσότερη μνήμη για απελευθέρωση, τι θα τρέξει τα νήματά της σε λιμοκτονία CPU, ποιες ενέργειες θα οδηγήσουν σε εκτεταμένη είσοδο I / O ή δίκτυο, επομένως θα επιβραδύνει ολόκληρη τη λειτουργία της.
Δεν υπάρχει κανένας τρόπος να το περιβάλλει. Θα μπορούσατε να είστε ένας πολύ έξυπνος προγραμματιστής που γράφει φοβερό κώδικα, αλλά, έως ότου δεν θα έχετε την παραπάνω ικανότητα, δηλαδή να παρακολουθείτε και να μελετάτε τις λεπτομέρειες της συμπεριφοράς του χρόνου λειτουργίας του συστήματός σας, θα εξακολουθείτε να αποτυγχάνετε όταν πρόκειται να παραδώσετε πραγματικά κορυφαία θέση εφαρμογές.
Στην πραγματικότητα, αφού αποκτήσετε κάποια εμπειρία, θα εντοπίσετε μια ολόκληρη κατηγορία «νόσων κώδικα» που μπορεί να εντοπιστεί ως παραμέληση του κανόνα της ενδοσκόπησης: Εν συντομία, σύνταξη κώδικα (μερικές φορές έξυπνος κώδικας) χωρίς συνεχή παρακολούθηση των επιπτώσεών της στην πραγματική πλατφόρμα .
Ευτυχώς για εμάς, η κοινότητα Android είχε καταφέρει να προσφέρει τόσα πολλά κορυφαία εργαλεία ενδοσκόπησης. Τα Facebook Stetho είναι από τα καλύτερα, AT & T's ΑΡΟ ('Application Resource Optimizer') είναι κάπως παλαιότερο αλλά ακόμα κορυφαίο, με πιθανώς την καλύτερη κονσόλα παρακολούθησης δικτύου εκεί έξω, ενώ Διαρροή παίρνει μια πολύ πιο περιορισμένη προσέγγιση που επικεντρώνεται (και κάνει πολύ καλά) στη βιβλιοθήκη ανίχνευσης διαρροών μνήμης χρόνου εκτέλεσης. Με λίγα λόγια, δεν υπάρχει έλλειψη εργαλείων εντοπισμού σφαλμάτων Android εκεί έξω.
Ακόμα, το διαμάντι στην κορώνα, το εργαλείο ενδοσκόπησης που πρέπει να εμπιστευτεί όταν κρίσιμα, ακριβή και καλά μορφοποιημένα δεδομένα πρέπει να εξαχθούν σχετικά με τη συμπεριφορά χρόνου εκτέλεσης της εφαρμογής σας εξακολουθεί να είναι η καλή παλιά Διακομιστής παρακολούθησης εντοπισμού σφαλμάτων Dalvik (DDMS) στο Android Studio, το οποίο είναι μαζί μας (δυστυχώς από πολλές ομάδες) από τις ημέρες της προσθήκης Eclipse Android.
Πόσο σημαντικό είναι το DDMS στην ανάπτυξη Android; Λοιπόν, γνωρίζοντας τι γνωρίζω τώρα σχετικά με το DDMS και την παρακολούθηση εφαρμογών για κινητά, γενικά λένε πριν από 5-6 χρόνια, ως λιγότερο έμπειρος προγραμματιστής Android, θα με σώσει παρτίδα πονοκεφάλων και νύχτες αποσφαλμάτωσης.
Και το πράγμα είναι ότι το DDMS είναι τόσο απλό να το μάθετε!
Φυσικά, ένα μεγάλο μέρος της σωστής χρήσης του, όπως και με οποιοδήποτε άλλο εργαλείο λογισμικού, συνοδεύεται από εμπειρία. Πρέπει να ακονίσετε τις επαγγελματικές σας δεξιότητες για κάποιο χρονικό διάστημα έως ότου γίνετε πραγματικά καλοί στην παρακολούθηση της απόδοσης κατά το χρόνο εκτέλεσης. Αλλά ακόμη και σε λίγες ώρες, πείτε μετά την ανάγνωση αυτού του άρθρου, εάν ακολουθήσετε τις προτάσεις μου και τις εφαρμόσετε στην επόμενη εφαρμογή σας, τα αποτελέσματα θα είναι καταπληκτικά! Η δημιουργία προφίλ και ο συντονισμός ακόμη και πολύπλοκων συστημάτων δεν είναι τόσο δύσκολη. Μπορεί επίσης να είναι διασκεδαστικό!
Συχνά τίθεται μια ερώτηση σχετικά με τη διαφορά μεταξύ αρχάριων και κύριου επιπέδου προγραμματιστών κινητών. Η εξειδίκευση του DDMS στο Android - ή γενικά, η δημιουργία προφίλ και οι δυνατότητες ενδοσκόπησης - είναι μια τέτοια σημαντική διαφορά.
Σημείωση: Ένα σημαντικό μέρος του να γίνετε κορυφαίος προγραμματιστής χρησιμοποιεί τις καλύτερες βιβλιοθήκες που είναι διαθέσιμες στον τομέα σας. Σε προηγούμενη Άρθρο ApeeScape , Ανέφερα μερικές από τις καλύτερες βιβλιοθήκες προγραμματιστών που είναι διαθέσιμες για Android. Κατά μία έννοια, αυτό το άρθρο αποτελεί συνέχεια του άρθρου 'βιβλιοθήκη' και καλύπτει ένα από τα πολλά εργαλεία Android. Περιττό να πούμε, αν σκοπεύετε να βελτιώσετε τις δεξιότητες προγραμματιστή Android, διαβάστε το τώρα!
Και τώρα, χωρίς άλλη παραλλαγή, ας εξετάσουμε τώρα την περιγραφή του DDMS, ενός από τα απόλυτα εργαλεία προγραμματιστών Android.
Κατά τη στάθμιση της προσπάθειας προς όφελος, πιθανώς κανένα άλλο εργαλείο δεν μπορεί να βελτιώσει την ποιότητα της εφαρμογής σας και να σας βοηθήσει να εντοπίσετε το Πραγματικά ακατάστατα και αόριστα σφάλματα που μπορεί να περιέχει. Ωστόσο, για κάποιο λόγο (τεμπελιά, κάποιος;), τόσες πολλές ομάδες δεν χρησιμοποιούν το DDMS.
Ας ξεκινήσουμε με ένα μάθημα σφαλμάτων στο DDMS:
Το DDMS είναι προσβάσιμο μέσω Στούντιο> Εργαλεία> Android> Παρακολούθηση συσκευών Android και κάνοντας κλικ στο κουμπί DDMS στο μενού. Μπορείτε επίσης να τοποθετήσετε ως εικονίδιο συντόμευσης (το κάνω) στον επάνω πίνακα σας.
w2 ωριαία τιμή έναντι υπολογισμού μισθού
Μόλις ανοίξει, αυτό θα δείτε:
Το αριστερό πλαίσιο επιτρέπει την επιλογή συσκευής / εφαρμογής και η δεξιά κονσόλα σας παρέχει πολλές προβολές, καθεμία στη δική της καρτέλα, η καθεμία εμφανίζει μια συγκεκριμένη προβολή της εφαρμογής σας.
Οι κύριες υπηρεσίες που παρέχονται από τον Dalvik Debug Monitor Server είναι:
Για να αποκτήσετε την τρέχουσα τιμή μνήμης σωρού που χρησιμοποιείται από την εφαρμογή σας, κάντε τα εξής:
Αυτή η τελευταία γραμμή πιθανώς απαιτεί πρόσθετη εξήγηση. Η χρήση μνήμης είναι μία από αυτές τις αναλυτικές τιμές όπου είναι δυναμική είναι πολύ πιο σημαντικά από την αρχική τιμή. Για τις περισσότερες εφαρμογές, δεν θα ενδιαφερόμαστε πολύ για την αρχική αξία χρήσης σωρού. Θα νοιαζόμαστε πολύ για την πρόοδο αυτής της αξίας, καθώς θα μας παρέχει μια σαφή ένδειξη για έναν πραγματικό εφιάλτη που περιμένει προγραμματιστές για κινητές συσκευές - διαρροές μνήμης Android:
Η χρήση της μονάδας heap stat είναι απλή. ως μέρος του κύκλου ζωής της ανάπτυξης της εφαρμογής, μετά την εισαγωγή αλλαγών που θα επηρεάσουν τη χρήση σωρού, θα ενεργοποιήσω τη λειτουργική μονάδα, 'Cause GC' για να ξεκινήσω τη συλλογή stat, να ενεργοποιήσω (συνήθως περισσότερες από μία φορές) τις εντατικές θέσεις της εφαρμογής μου, και περιοδικά 'Αιτία GC' για ανανέωση. Εάν η χρήση σωρού συνεχίζει να αυξάνεται, έχω διαρροή μνήμης στα χέρια μου και πρέπει να το λύσω (λεπτομέρειες σχετικά με το πώς - παρακάτω). Αν όχι, και ανεξάρτητα από το πραγματικό μέγεθος του σωρού, είμαι καλός.
Εάν εντοπιστεί διαρροή μνήμης, το επόμενο εργαλείο που θα χρησιμοποιήσω είναι το Object Allocation Tracker. Ας δούμε τι μπορεί να κάνει για τη διαχείριση μνήμης στο Android.
Με απλά λόγια, το tracker κατανομής θα σας παράσχει τις πληροφορίες που απαιτούνται για να καταλάβετε ποιος είναι το κόμμα που «φταίει» για το τρέχον μέγεθος σωρού. Αυτή η ενότητα θα σας πει από ποια θέματα και μεθόδους προήλθαν οι εντολές κατανομής σε πραγματικό χρόνο, καθιστώντας την πολύτιμη για ανάλυση μνήμης στο Android.
Για να ξεκινήσετε την παρακολούθηση, κάντε τα εξής:
Τώρα, από τη δική μου εμπειρία, πραγματοποιώντας ενέργειες εντατικής κατανομής στην εφαρμογή σας, ακολουθώντας κλικ στο 'Λήψη κατανομών' για να δείτε τους μετρητές κατανομής θα πρέπει συνήθως να σας κατευθύνει στη διαρροή με έναν απλό τρόπο. μερικές φορές, είτε όταν η διαρροή δεν είναι γραμμική (δηλαδή, συμβαίνει κάθε μέρα) Ή όταν η εφαρμογή σας περιέχει πολλές διαρροές που ενδέχεται να μην λειτουργούν. Σε τέτοιες περιπτώσεις, και δεν έχω συναντήσει πολλές από αυτές, θα πρέπει να καταφύγετε στη μη αυτόματη δημιουργία ενός αρχείου HPROF απόρριψης και ανάλυσής του. Η ανάλυση μνήμης και η διαχείριση μνήμης Android δεν θα καλυφθούν σε βάθος σε αυτό το άρθρο. Βλέπω εδώ για μερικούς δυνητικούς πελάτες.
ερωτήματα πολυμέσων για τυπικές συσκευές
Γνωστό σε οποιονδήποτε προγραμματιστή, τα σύγχρονα μονοπάτια εκτέλεσης λογικής ομαδοποιούνται σε νήματα, το καθένα αποτελεί μια σειριακή ροή εκτέλεσης στην εφαρμογή σας. Κυριολεκτικά όλες οι εφαρμογές χρησιμοποιούν περισσότερα από ένα νήμα εκτέλεσης. Μερικά από αυτά χρησιμοποιούν δεκάδες.
Μια γενική εξέταση των πιθανών προβλημάτων κατά τη χρήση νημάτων είναι έξω από το πεδίο αυτού του άρθρου. Ας επικεντρωθούμε στη συνέχεια σε ένα μόνο, δηλαδή το λιμό νήμα, το οποίο είναι το κύριο πρόβλημα για το οποίο θα επισκεφθείτε την κονσόλα πληροφοριών νήματος.
Σε όλες τις εφαρμογές για κινητά, διαφορετικά νήματα θα ανταγωνίζονται για τον χρόνο CPU. Απλώς δεν υπάρχουν αρκετοί από αυτούς για να κάνουν τριγύρω. Τι συμβαίνει εάν, για οποιονδήποτε λόγο, ένα ή περισσότερα εάν αυτά τα νήματα δεν θα λάβουν το χρόνο εκτέλεσης που χρειάζονται; Συνήθως κακά πράγματα. Το σύστημα δεν θα συμπεριφέρεται όπως το σχεδιάσατε να συμπεριφέρεται, κάτι που είναι πάντα κακή ιδέα. Πιθανοί λόγοι για αυτό το πρόβλημα θα μπορούσαν να είναι η ρύθμιση χαμηλής προτεραιότητας, άλλα νήματα να εκτελούν ταυτόχρονα ρύθμιση με υπερβολικά υψηλή προτεραιότητα, να ξοδεύουν πολύ χρόνο σε οθόνες συγχρονισμού και πολλά άλλα. Ολα διαβόητα είναι δύσκολο να ανιχνευθεί μόνο με έλεγχο κώδικα.
Κονσόλα νήματος Android DDMS για τη διάσωση!
Καθώς εισάγετε την προβολή νήματος, θα δείτε μια λίστα που αποτελείται από εγγραφές νήματος, καθένα από τα οποία περιέχει το όνομα και το αναγνωριστικό του νήματος, και δύο επιπλέον μετρητές που ονομάζονται utime και stime. Το Utime μετρά τον συνολικό χρόνο που ξοδεύεται από το νήμα που εκτελεί τον κωδικό χρήστη (σκεφτείτε τις λειτουργίες σας και τις βιβλιοθήκες τρίτων), ενώ το stime μετρά τον συνολικό χρόνο που δαπανάται για τον κωδικό συστήματος (αναστολή λειτουργίας, συγχρονισμός, κλήσεις συστήματος - πολλά). Το πρώτο - utime - θα είναι συνήθως πιο ενδιαφέρον για εμάς, αν και μπορώ να σκεφτώ προβλήματα που θα εκδηλωθούν ως επί το πλείστον από τον μετρητή stime.
Εντάξει, έχουμε τον κώδικα που εκτελείται, συμπεριλαμβανομένων πολλών νημάτων, και θέλουμε να διασφαλίσουμε ότι όλα τα νήματα θα έχουν το μερίδιό τους στον χρόνο της CPU. Γι 'αυτό, αφήσαμε πρώτα το σύστημά μας να τρέξει για λίγο, και στη συνέχεια ανοίξουμε την καρτέλα νήματος και αρχίζουμε να ψάχνουμε για «παράξενες» τιμές utime. Το μηδέν μπορεί σίγουρα να αντιπροσωπεύει ένα πρόβλημα - το νήμα δεν κυριολεκτικά δεν είχε χρόνο CPU και καμία χρήση CPU. Ωστόσο, οι υπερβολικά υψηλές τιμές ενδέχεται να αντιπροσωπεύουν μια διαφορετική πτυχή του ίδιου προβλήματος: δηλαδή, τα νήματα των οποίων η προτεραιότητα είναι τόσο υψηλή ώστε να προκαλούν πείνα σε άλλους.
Σημειώστε ότι για έναν τύπο νημάτων, η τιμή μηδενικού ή σχεδόν μηδενικού utime δεν θα υποδηλώνει πραγματικό πρόβλημα. Αυτά είναι τα δεσμευμένα νήματα I / O, νήματα που κάνουν κυρίως πρόσβαση στο δίκτυο ή στο δίσκο (ή στη βάση δεδομένων). Αυτά τα θέματα πρέπει περνούν το μεγαλύτερο μέρος του χρόνου τους είτε περιμένοντας να φτάσουν τα δεδομένα είτε μπλοκάροντας σε εκκρεμείς κλήσεις συστήματος, καμία από αυτές τις ενέργειες δεν αυξάνει τον μετρητή ωρών. Γνωρίστε τα θέματα σας!
Υπόδειξη: Μην χρησιμοποιείτε ποτέ το προεπιλεγμένο όνομα του νήματος. Δεν σημαίνει τίποτα και συνήθως δεν θα το εντοπίσετε στις προβολές DDMS. Αντίθετα, κάθε φορά που δημιουργείτε ένα νήμα ή παίρνετε από ένα νήμα, ξεκινήστε την αλληλεπίδρασή σας μέχρι εκχώρηση με ένα αυτονόητο όνομα . Αυτό θα κάνει τον τρόπο ζωής σας πιο εύκολο από το εντοπισμό σφαλμάτων / δημιουργία προφίλ στο σύστημά σας. Συνήθως προετοιμάζω το όνομα της εφαρμογής, ώστε να ξεχωρίζω το νήμα που δημιουργείται από το Android και αυτά που δημιουργούνται από τον δικό μου κωδικό, για παράδειγμα: MyApp-server-connector, MyApp-db-interactor κ.λπ.
Υπόδειξη: Η προτεραιότητα ενός νήματος υποδηλώνει (χαλαρά μιλώντας) το χρόνο CPU που θα παραχωρηθεί από τον προγραμματιστή. Η προτεραιότητα που αποδίδεται στα νήματα των εργαζομένων σας είναι κρίσιμης σημασίας για τη συνολική απόδοση και την «ομαλότητα» της εφαρμογής σας, και σε πολλές περιπτώσεις μπορεί να είναι η διαφορά μεταξύ της γρήγορης γρήγορης συμπεριφοράς και μιας ανώμαλης αργής. Ο κανόνας εδώ είναι απλός: Η προεπιλεγμένη προτεραιότητα που έχει εκχωρηθεί από το Android, η οποία είναι NORMAL = 5, σχεδόν πάντα δεν είναι αυτή που θέλετε να χρησιμοποιήσετε. Αντ 'αυτού, για τα περισσότερα νήματα εργαζομένων, θέλετε έναν μικρότερο αντίκτυπο στη συνολική χρήση της CPU. Για να το κάνετε αυτό, κατά την εκκίνηση ενός νήματος, ορίστε την προτεραιότητά του σε μικρότερη τιμή, συνήθως πηγαίνω με προτεραιότητα = 3.
Τα στατιστικά στοιχεία δικτύου σάς επιτρέπουν να παρακολουθείτε τόσο τα εισερχόμενα όσο και τα εξερχόμενα κανάλια επικοινωνίας στην εφαρμογή σας με λογικά αναγνώσιμο από τον άνθρωπο τρόπο.
Ο άξονας y στο γράφημα δικτύου αντιπροσωπεύει την ταχύτητα μεταφοράς της μετάδοσης που μετράται σε KB / δευτερόλεπτο, ενώ ο άξονας x αντιπροσωπεύει το χρόνο που έχει παρέλθει σε δευτερόλεπτα. Επομένως, για να λάβετε μια γρήγορη εκτίμηση του μεγέθους του κιβωτίου ταχυτήτων, προσπαθήστε να εκτιμήσετε την περιοχή της σχετικής ακίδας. Μετά από λίγο, αυτό γίνεται αρκετά εύκολο.
Λάβετε υπόψη ότι, αφού εισαχθεί αυτή η κονσόλα, θα χρειαστεί να κάνετε κλικ στο πάνω κουμπί 'Ενεργοποίηση' για να αρχίσουν να εμφανίζονται οι μετρήσεις δικτύου.
Προτού η κονσόλα δικτύου ωριμάσει στο επίπεδο που είναι τώρα, οι προγραμματιστές συνήθως έπρεπε να καταφύγουν στη χρήση εφαρμογών sniffer (ορισμένοι εξακολουθούν να κάνουν) για να λάβουν παρόμοιες πληροφορίες.
Το σπουδαίο πράγμα για αυτήν την κονσόλα είναι ο τρόπος με τον οποίο απεικονίζει μια από τις σημαντικότερες συμπεριφορές εξάντλησης της μπαταρίας - αυτή της συνεχιζόμενης επικοινωνίας με μικρά πακέτα. Όπως γνωρίζετε πολλοί από εσάς, αυτό που θα κάνει την εφαρμογή σας να εξαντληθεί η μπαταρία δεν είναι τα πέντε λεπτά εντατικής δικτύωσης που κάνει, αλλά μάλλον οι μεγάλες χρονικές περιόδους σύντομων, επαναλαμβανόμενων δικτύων, π.χ. για λόγους διατήρησης, διαγνωστικών ή ενημερώσεων κατάστασης.
Μόλις εντοπιστεί ένα τέτοιο μοτίβο και η οπτική εμφάνιση πακέτων της κονσόλας δικτύου το καθιστά τόσο εύκολο, σκεφτείτε αμέσως παρτίδα . Μπορώ να κάνω παρτίδα πολλαπλών μικρών κιβωτίων σε ένα μεγάλο; Η επίδραση της μπαταρίας αυτής της αλλαγής είναι βέβαιο ότι θα μετακινήσει εφαρμογές από ένα σύστημα εξάντλησης μπαταριών σε μια καλά συμπεριφερόμενη κατηγορία!
αποζημίωση για τα μέλη του συμβουλευτικού συμβουλίου
Υπόδειξη: Ποτέ μην φορτώνετε μια εικόνα στη μνήμη ως έχει. Αυτό είναι ένα σφάλμα εκτός μνήμης που περιμένει να συμβεί. Αντ 'αυτού, εκτελέστε φόρτωση προς τα κάτω ή ακόμα καλύτερα, χρησιμοποιήστε ένα βιβλιοθήκη τρίτων για τη διαχείριση της κλιμάκωσης για εσάς.
Παρόλο που σπάνια θα χρησιμοποιήσετε αυτές τις πληροφορίες, λάβετε υπόψη ότι το DDMS βασίζεται στη στοίβα Android Debug Bridge (ADB) για τη μεταφορά δεδομένων πίσω / από τη συσκευή. Εάν το DDMS δεν εμφανίσει την εφαρμογή σας ή παγώσει στη μέση μιας περιόδου σύνδεσης DDMS, το καλύτερο στοίχημά σας θα είναι να ανοίξετε μια κονσόλα και να πληκτρολογήσετε:
adb devices
για να βεβαιωθείτε ότι η συσκευή σας είναι προσβάσιμη και εξουσιοδοτημένη με το ADB. Εάν δεν συμβαίνει αυτό, σε πολλές περιπτώσεις, η επανεκκίνηση του τοπικού διακομιστή ADB θα πρέπει να λύσει το πρόβλημα:
adb kill-server adb devices # restarts the adb server and displays all detected devices
Εάν εξακολουθείτε να αντιμετωπίζετε προβλήματα και η εφαρμογή σας είναι εγκατεστημένη σε μια φυσική συσκευή, προσπαθήστε να αποσυνδέσετε όλες τις παρουσίες εξομοιωτή. Γιατί; Επειδή το DDMS συνδέεται τόσο με τις συσκευές φυσικών συσκευών όσο και με τις παρουσίες εξομοιωτή, η προεπιλογή είναι η τελευταία.
Παράδειγμα χρήσης DDMS πραγματικής ζωής: Μια εφαρμογή σταματά (δεν διακόπτεται, απλώς σταματά). Ο χρήστης σπεύδει αμέσως σε κοντινό σταθμό εργασίας, συνδέεται με USB και ανοίγει DDMS σε προβολή νήματος για να ανακαλύψει το ίχνος στοίβας «αποτυχημένο νήμα» στοίβα στοίβα - στην περίπτωσή μου, λόγω του αδιεξόδου συγχρονισμού που, μόλις εντοπιστεί, λύθηκε εύκολα με εναλλαγή.
Υπόδειξη: Εάν η τυπική μνήμη RAM που έχει εκχωρηθεί στην εφαρμογή σας από το Android δεν είναι αρκετή, όπως θα μπορούσε να συμβεί για, π.χ., εφαρμογές υψηλής έντασης μέσων, σημειώστε ότι μπορείτε να αποκτήσετε περίπου 15-20% επιπλέον μνήμη στις περισσότερες συσκευές αυξάνοντας το _ μεγάλοHeap σημαία δήλωσης: https://developer.android.com/guide/topics/manifest/application-element.html_
Κατά κανόνα, οι εφαρμογές για κινητά δεν είναι γραμμικές κατασκευές. Αντ 'αυτού, αναπτύσσουν στρατηγικές ευαισθητοποίησης που τους επιτρέπουν να παρακολουθούν και να αντιδρούν σε αλλαγές στην κατάσταση της συσκευής. Μια εφαρμογή μπορεί, για παράδειγμα, να ακούσει εισερχόμενες κλήσεις ή μηνύματα κειμένου, να επαναπροσδιορίσει την κατάστασή της σύμφωνα με την κατάσταση του δικτύου και να παρακολουθεί και να αντιδρά σε αλλαγές στην τοποθεσία της συσκευής.
Ένα ασήμαντο παράδειγμα για το τελευταίο θα ήταν μια εφαρμογή GPS. Οι περισσότεροι από εμάς δεν αναπτύσσουν τέτοιες εφαρμογές (δυστυχώς, η αγορά δεν είναι αρκετά μεγάλη ...), ωστόσο, σε πολλές περιπτώσεις, αναπτύσσουμε λογική, η οποία εξαρτάται από την τοποθεσία, είτε πρόκειται για μια απλή προβολή χάρτη της τρέχουσας θέσης του χρήστη, παρακολούθηση διαδρομής , ή μια προβολή δεδομένων ευαίσθητης τοποθεσίας.
Ο έλεγχος για τέτοιου είδους ευαίσθητες καταστάσεις είναι εξαιρετικά περίπλοκος, μερικές φορές περισσότερο από το γράψιμο του πραγματικού κώδικα. Εάν έχετε μια φυσική συσκευή με SIM, μπορείτε φυσικά να εκδώσετε και να λάβετε κλήσεις και SMS. Η αλλαγή της κατάστασης της τηλεφωνίας της συσκευής σας είναι πολύ πιο δύσκολη, αλλά μπορεί ακόμα να γίνει. Οι αλλαγές τοποθεσίας δοκιμής θα μπορούσαν να είναι πιο δύσκολες, αν και η βόλτα στην πόλη με τον φορητό υπολογιστή σας είναι μια επιλογή…
Αλλά ακόμα - πώς θα χειριστούμε τις παρουσίες εξομοιωτή; Πώς μπορούμε να τις δοκιμάσουμε για αυτές τις αλλαγές;
DDMS για τη διάσωση, για άλλη μια φορά. Ένα από τα ισχυρότερα αλλά συχνά παραβλεφθέντα χαρακτηριστικά του DDMS είναι η ικανότητά του να εκδίδει ('spoof') εικονικά γεγονότα σε μια παρουσία εξομοιωτή που τρέχει. Το DDMS μπορεί να εκδώσει μια κλήση από έναν συγκεκριμένο αριθμό στον εξομοιωτή, να στείλει ένα SMS, να αλλάξει δεδομένα κατάστασης τηλεφωνίας και άλλα.
Μόλις φτάσετε στον εξομοιωτή, όλα αυτά τα πλαστογραφημένα συμβάντα δεν θα διακρίνονται πλέον από τα «πραγματικά» γεγονότα, δηλαδή σαν να λαμβάνονται από τους υποκείμενους αισθητήρες υλικού. Συγκεκριμένα, όλοι οι δέκτες της σχετικής εφαρμογής σας θα ενεργοποιηθούν με τον ίδιο τρόπο που θα είχαν κατά τη λήψη ενός πραγματικού μηνύματος κλήσης / SMS.
Η ενεργοποίηση της κατάστασης και των ενεργειών της τηλεφωνίας είναι μάλλον απλή:
Για να ελέγξετε την εφαρμογή σας για περιπτώσεις χαμηλής συνδεσιμότητας δικτύου (την οποία θα έπρεπε σε οποιαδήποτε εφαρμογή με επίκεντρο το δίκτυο) μεταβείτε στην ενότητα Κατάσταση τηλεφωνίας και ορίστε τις τιμές ταχύτητας και λανθάνοντος χρόνου στις επιθυμητές τιμές. Συνήθως πηγαίνω με την τιμή GPRS και για τους δύο ως αποτελεσματικό τρόπο προσομοίωσης χαμηλής συνδεσιμότητας, αλλά μη διστάσετε να ορίσετε τις δικές σας τιμές.
Για να προσομοιώσετε τηλεφωνικές κλήσεις ή SMS, μεταβείτε στην ενότητα Ενέργεια τηλεφωνίας, ορίστε τον αριθμό τηλεφώνου προέλευσης, προσθέστε ένα μήνυμα κειμένου εάν χρειάζεται και απομακρύνετε. Αυτό το εργαλείο είναι ιδιαίτερα αποτελεσματικό όταν έχετε ορίσει μια αποκλειστική διαδρομή κώδικα για κλήσεις από το εξωτερικό και θέλετε να το δοκιμάσετε βάσει προϋπολογισμού.
πού είναι το αρχείο καταγραφής σφαλμάτων php
Τα πράγματα γίνονται πιο ενδιαφέροντα όταν πρόκειται για κοροϊδεύοντας μια νέα τοποθεσία.
Εάν το μόνο που στοχεύετε είναι να ορίσετε μια νέα τοποθεσία για την παρουσία εξομοιωτή, επιλέξτε Μη αυτόματη, ορίστε τις επιθυμητές τιμές γεωγραφικού πλάτους / μήκους και πατήστε Αποστολή.
Αλλά τι γίνεται αν, αντί να ορίσετε μια σταθερή τοποθεσία, θέλετε η εφαρμογή σας να περάσει από μια προκαθορισμένη διαδρομή - ας πούμε, να εξετάσει τη συμπεριφορά της καθώς ο χρήστης ταξιδεύει από τη μια πόλη στην άλλη; Μια τέτοια δοκιμή μπορεί να έχει μεγάλη αξία για οποιαδήποτε εφαρμογή που υποστηρίζεται από χάρτη, καθώς και για άλλες εφαρμογές που είναι ευαίσθητες στην τοποθεσία, οι οποίες ορίζουν το παράθυρο δεδομένων τους ανά τοποθεσία χρήστη. Εδώ, θα θελήσετε να δείτε ότι η αλλαγή τοποθεσίας με διαφορετική ταχύτητα θα διατηρήσει ενημερωμένο το παράθυρο δεδομένων που εμφανίζεται.
Για αυτό, θα χρησιμοποιήσουμε μια ειδική μορφή που ονομάζεται KML, η οποία αναπτύχθηκε ειδικά για χρήση με το Google Earth και η οποία αντιπροσωπεύει διαδρομές ή διαδρομές, ως ένα σύνολο συνδεδεμένων σημείων στο διάστημα, το οποίο μπορεί να είναι από συσκευές με δυνατότητα GPS.
Το GPX είναι μια εναλλακτική μορφή διαδρομής που υποστηρίζεται από το DDMS. Για όλους τους πρακτικούς σκοπούς, αυτά τα δύο πρέπει να θεωρούνται εναλλάξιμα όταν χρησιμοποιούνται για πλαστογράφηση τοποθεσίας για κινητά.
Ας περπατήσουμε τώρα στα στάδια καθορισμού μιας πλαστής διαδρομής στον εξομοιωτή.
Μόλις εμφανιστεί η διαδρομή πάνω από το χάρτη, μεταβείτε στη γραμμή διευθύνσεων και αντιγράψτε τη διεύθυνση URL
Με τη διεύθυνση URL στο πρόχειρο, μεταβείτε στο Οπτικοποιητής GPS , επικολλήστε το στο πλαίσιο κειμένου 'Παροχή διεύθυνσης URL' και κάντε κλικ στο κουμπί Μετατροπή:
και κάντε κλικ για λήψη του προκύπτοντος αρχείου GPX (με κάπως ακατάστατο όνομα, π.χ. 20170520030103-22192-data.gpx)
Δεν χρειάζεται να δημιουργήσετε τη δική σας διαδρομή. Πολλές διαδρομές για λήψη από τον ιστότοπο, όπως το OpenStreetMap (βλ «Ίχνη GPS» Ενότητα).
Τέλος, λάβετε υπόψη ότι σε αντίθεση με τις παλαιότερες εκδόσεις DDMS, όπου η φόρτωση του αρχείου διαδρομής ήταν πολύ εύκολη, οι νεότερες εκδόσεις ενδέχεται να απαιτούν κάποια δοκιμή και σφάλμα κατά τη φόρτωση μιας συγκεκριμένης διαδρομής.
Για παράδειγμα φαίνεται ότι μόνο το GPX 1.1 υποστηρίζεται από το DDMS. Οι νέες εκδόσεις GPX ενδέχεται να απαιτούν κάποια χειροκίνητη προσαρμογή.
Επιπλέον, δεν υποστηρίζεται πλέον η μορφή σημείου GPX. Αντ 'αυτού, χρησιμοποιήστε τη μορφή GPX Track:
0 2017-02-02T08:01:41Z
Αρκετή θεωρία! Ήρθε η ώρα για κάποια εξάσκηση. Προτείνω, υποθέτοντας ότι είστε Προγραμματιστής Android , ξεκινώντας από το επόμενο έργο σας, θα αφιερώσετε μόνο μία ώρα την εβδομάδα για να αποκτήσετε ενδοσκόπηση στην απόδοση της εφαρμογής σας μέσω DDMS.
Θα εκπλαγείτε από το ποσό των ποιοτικές πληροφορίες (δηλαδή, πληροφορίες που μπορεί να χρησιμοποιηθούν για τη άμεση βελτίωση της κατάστασης της εφαρμογής σας) που θα σας προσφέρουν!
Το Android DDMS, όπως έχω παρακολουθήσει ξανά και ξανά με αρχάριους προγραμματιστές, είναι ένα εργαλείο που μπορεί να βελτιώσει σημαντικά τις δυνατότητες ενός προγραμματιστή, υπό την προϋπόθεση ότι είναι mastered και χρησιμοποιείται σωστά. Η ικανότητα ενός προγραμματιστή Android να προσφέρει κορυφαία συστήματα θα κυριολεκτικά ανεβεί μια ή δύο εγκοπές μόλις αξιοποιήσει το πλήρες δυναμικό του DDMS στην ανάπτυξη Android. Επομένως, το να αφιερώσετε λίγες ώρες για να κάνετε καλή χρήση του DDMS ακούγεται σαν μια έξυπνη επένδυση, καθώς μπορεί να βελτιώσει σημαντικά την απόδοση και την απόδοση του Android.
Γίνετε ένας από τους έξυπνους. Χρησιμοποιησετο.
καλύτερες επιστολές του Διευθύνοντος Συμβούλου προς τους μετόχους
Ως μέρος του Android Studio, το DDMS είναι ένα από τα πιο σημαντικά εργαλεία ενδοσκόπησης που διατίθενται στους προγραμματιστές Android. Χρησιμοποιείται για εντοπισμό σφαλμάτων, διαγνωστικά και προφίλ.
Το Android Device Monitor παρέχει μια διεπαφή χρήστη για πολλά εργαλεία εντοπισμού σφαλμάτων. Είναι ένα ελαφρύ, αυτόνομο εργαλείο, επομένως οι χρήστες δεν απαιτείται να εγκαταστήσουν το Android Studio ή οποιοδήποτε άλλο IDE.
Το Android Debug Bridge (adb) είναι ένα εργαλείο γραμμής εντολών που έχει σχεδιαστεί για να διευκολύνει την επικοινωνία με μια συσκευή Android. Χρησιμοποιείται για τον εντοπισμό σφαλμάτων, την εγκατάσταση εφαρμογών και την πρόσβαση σε ένα κέλυφος Unix για την εκτέλεση εντολών στη συσκευή.
Το ADM χρησιμοποιείται για τον εντοπισμό, την κλήση ή τη διαγραφή της συσκευής σας μέσω μιας κονσόλας ιστού.
Το Logcat είναι το εσωτερικό σύστημα καταγραφής του Android για εφαρμογές και λειτουργικές μονάδες συστήματος.