Τι ακριβώς συμβαίνει όταν μετακινείτε μια εφαρμογή Android από τη λίστα πρόσφατων εφαρμογών;
Όταν σύρετε μια εφαρμογή από τη λίστα εφαρμογών Android που εκτελείται αυτήν τη στιγμή, τι ακριβώς συμβαίνει με την εφαρμογή και τα δεδομένα; Διαβάστε παρακάτω καθώς ερευνούμε.
Η σημερινή συνάντηση ερωτήσεων και απαντήσεων έρχεται σε επαφή με την ευγένεια του Android Enthusiast - μια υποδιαίρεση του Stack Exchange, μια κοινότητα που καθοδηγείται από την ομάδα των ερωτηματολογίων και ιστοτόπων.
Το ερώτημα
Ο αναγνώστης του Android Enthusiast Eldarerathis είναι περίεργος για τη λειτουργία σάρωσης εφαρμογών που σας επιτρέπει να τραβήξετε τον κατάλογο των εφαρμογών που εκτελείτε μέσω του κουμπιού του σπιτιού και, στη συνέχεια, να τα σύρετε προς τα δεξιά, πιθανώς να τα κλείσετε:
Η πρόσφατη λίστα εφαρμογών στο Sandwich Ice Cream πρόσθεσε τη δυνατότητα να ξεφυλλίσουν τις εφαρμογές από τη λίστα, απορρίπτοντάς τους μόνιμα (και όσο γνωρίζω, αυτή είναι μια λειτουργία βανίλιας, όχι CM / Custom ROM). Η τεκμηρίωση και τα στιγμιότυπα της πλατφόρμας δεν φαίνεται να καλύπτουν τις λειτουργίες κάτω από την κουκούλα αυτής της λειτουργικότητας, αλλά είμαι περίεργος να μάθω τι κάνει πραγματικά το σύστημα.
Περαιτέρω προσθέτοντας στην περιέργειά μου, αποφάσισα να κάνω μια γρήγορη δοκιμή: ξεκίνησα τη μουσική σε μια εγκατάσταση CM9, στη συνέχεια στηρίζαμε από αυτήν. Στη συνέχεια, έλεγξα την πρόσφατη λίστα εφαρμογών και είδα ότι ήταν πράγματι εκεί (και στην κατάλληλη κατάσταση, με βάση τη μικρογραφία). Στη συνέχεια μπήκα
Ρυθμίσεις-> Εφαρμογές
και η δύναμη σταμάτησε την εφαρμογή Μουσική, αλλά εξακολουθούσε να περιλαμβάνεται στην πρόσφατη λίστα, με αποτέλεσμα να πιστεύω ότι δεν συνδέεται με διαδικασίες που παραμένουν στο παρασκήνιο.Συνειδητοποιώντας τώρα ότι η Μουσική ίσως ήταν μια κακή επιλογή, δοκιμάσαμε επίσης με την εφαρμογή USA Today. Αυτό έδειξε ουσιαστικά την ίδια συμπεριφορά και φάνηκε σαν να αναγκάστηκε να "επανεκκινήσει" μετά τη διακοπή της δύναμης (που έχει νόημα) αν και η μικρογραφία στην πρόσφατη λίστα εφαρμογών δεν αντανακλούσε αυτό (κρυφά, υποθέτω;).
Λοιπόν, τι συμβαίνει στην πραγματικότητα στο επίπεδο του λειτουργικού συστήματος όταν μετακινείτε μια εφαρμογή από την πρόσφατη λίστα; Απλώς καθαρίζει τα δεδομένα της εφαρμογής από τη μνήμη RAM και τα σκουπίδια συλλέγουν, καταστρέφοντας την αποθηκευμένη κατάσταση?
Τι ακριβώς συμβαίνει όταν ξεφυλλίσετε την εφαρμογή από τη λίστα?
Οι απαντήσεις
Ο συνθέτης Android Enthusiast Austin Mills προσφέρει κάποια εικόνα:
Η μετακίνηση εφαρμογών από την πρόσφατη λίστα εφαρμογών είναι βανίλια, και ναι, δεν είναι καλά τεκμηριωμένη. Αυτό ήταν το θέμα μιας αξιοπρεπούς συζήτησης σε διάφορα φόρουμ Android ... η συναίνεση φαίνεται να περιγράφεται καλύτερα εδώ σε μερικά σχόλια: ότι η συμπεριφορά είναι παρόμοια αλλά όχι ακριβώς η ίδια με το κλείσιμο μιας εφαρμογής - γενικά (για εφαρμογές που δεν καθορίζετε το ρητό χειρισμό του κουμπιού πίσω) είναι το ίδιο με το χτύπημα αρκετών χρόνων από μια εφαρμογή που εξέρχεστε από αυτήν.
Ο σύνδεσμος έχει κάποιες περισσότερες λεπτομέρειες σχετικά με τις λεπτομέρειες, αλλά συνολικά μπορείτε να το σκεφτείτε σαν να παραιτηθείτε από την εφαρμογή.
Συγκεκριμένα για την εφαρμογή Μουσική, πιστεύω ότι ξεκινά μια υπηρεσία, οπότε ενώ η ίδια η εργασία (η εφαρμογή Μουσική / UI) μπορεί να κλείσει, η υπηρεσία συνεχίζει να τρέχει στο παρασκήνιο, ώστε η μουσική σας να μην σταματήσει ξαφνικά μόνο επειδή η εργασία έχει διαγραφεί για λόγους διαχείρισης της μνήμης. Αυτό μπορεί να έχει επηρεάσει αυτό που είδατε.
Στη συνέχεια, συμμετέχοντας στον κύκλο ερωτήσεων και απαντήσεων της ζωής, ο Eldarerathis επέστρεψε με κάποια δική του έρευνα για να ολοκληρώσει την απάντηση:
Φαίνεται ότι βρήκα τους μαγικούς όρους αναζήτησης που οδήγησαν σε κάποιες εξηγήσεις από τους υπαλλήλους της Google. Συγκεκριμένα, βρήκα μερικά διαφορετικά μέρη όπου η Dianne Hackborn εξηγεί τι συμβαίνει όταν βγάζετε κάτι από την πρόσφατη λίστα. Το πρώτο είναι ένα σχόλιο σε μία από τις αναρτήσεις του στο Google+:
[W] ειδικά συμβαίνει όταν πετάτε μακριά μια πρόσφατη εργασία είναι: (1) σκοτώνει οποιοδήποτε υπόβαθρο ή κενές διαδικασίες της εφαρμογής (βλ. Εδώ για αυτό που σημαίνει) και (2) χρησιμοποιεί το νέο API για να πει οποιαδήποτε υπηρεσία η εφαρμογή για την απομάκρυνση του έργου, ώστε να μπορεί να κάνει ό, τι κρίνει κατάλληλο.
Σημειώνει επίσης σε ένα σχόλιο blog:
Στην πραγματικότητα, η κατάργηση μιας καταχώρησης σε πρόσφατες εργασίες θα σκοτώσει όλες τις διαδικασίες φόντου που υπάρχουν για τη διαδικασία. Δεν θα προκαλέσει άμεση διακοπή των υπηρεσιών, αλλά υπάρχει ένα API για να διαπιστώσουν ότι το έργο έχει αφαιρεθεί για να αποφασίσει αν θέλουν αυτό να σημαίνει ότι πρέπει να σταματήσουν. Αυτό γίνεται έτσι ώστε η κατάργηση λέει ότι η πρόσφατη εργασία μιας εφαρμογής ηλεκτρονικού ταχυδρομείου δεν θα την αναγκάσει να σταματήσει τον έλεγχο για το ηλεκτρονικό ταχυδρομείο.
Εάν θέλετε πραγματικά να σταματήσετε τελείως μια εφαρμογή, μπορείτε να πατήσετε πατημένα τις πρόσφατες εργασίες για να μεταβείτε στις πληροφορίες της εφαρμογής και χτυπήστε τη δύναμη να σταματήσετε εκεί. Η διακοπή δύναμης είναι μια πλήρης καταστροφή της εφαρμογής - όλες οι διαδικασίες θανατωθούν, όλες οι υπηρεσίες θα σταματήσουν, όλες οι ειδοποιήσεις θα καταργηθούν, όλοι οι συναγερμοί θα καταργηθούν κλπ. Η εφαρμογή δεν επιτρέπεται να ξεκινήσει ξανά μέχρι να ζητηθεί ρητά.
Επομένως, φαίνεται ότι η περίληψη είναι ότι η σάρωση μιας εφαρμογής από τη λίστα θα σκοτώσει πρώτα όλες τις διαδικασίες υποβάθρου για την εφαρμογή, στη συνέχεια χρησιμοποιήστε
onTaskRemoved
για να ειδοποιήσετε την εφαρμογή ότι η εργασία φόντου καταργήθηκε. Σε αυτό το σημείο φαίνεται ότι εξαρτάται από την εφαρμογή να αποφασίσει τι συμβαίνει, γι 'αυτό υποθέτω τεχνικά δεν είναι έναν σκληρό και γρήγορο κανόνα για το τι συμβαίνει με το app πέρα από αυτό το σημείο.
Έχετε κάτι να προσθέσετε στην εξήγηση; Απενεργοποιήστε τα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους τεχνολογικούς χρήστες Stack Exchange; Δείτε το πλήρες νήμα συζήτησης εδώ.