Το αρχικό δημοσίευμα του Speirs μπορείτε να το διαβάσετε εδώ αλλά παρακάτω παραθέτω την (ελεύθερη) ελληνική μετάφραση που ελπίζω να σας φανεί ιδιαίτερα χρήσιμη στο να κατανοήσουμε όλοι τον τρόπο λειτουργίας του multitasking στο iOS.
Υπάρχει μια συμβουλή για το iOS που είναι πολύ διαδεδομένη αλλά είναι λάθος. Η συμβουλή αυτή είναι η εξής:
“Όλες οι εφαρμογές στην multitasking bar στο iOS είναι ενεργές και καθυστερούν την συσκευή, τρώνε μνήμη και μειώνουν την αυτονομία. Για να βελτιστοποιήσετε την απόδοση και επίδοση της συσκευής πρέπει να τις κλείσετε χειροκίνητα.”
Η παραπάνω πρόταση είναι πέρα για πέρα λανθασμένη για τους λόγους που θα δούμε παρακάτω. Να είμαστε ξεκάθαροι: Η multitasking bar περιέχει μια λίστα με όλες τις εφαρμογές που έχετε χρησιμοποιήσει πρόσφατα και όχι με τις εφαρμογές που είναι ενεργές. Ο χρήστης δεν χρειάζεται σχεδόν ποτέ να διαχειριστεί αυτές τις εφαρμογές. Από τη στιγμή που πατιέται το home button η εφαρμογή σχεδόν πάντα σταματά να τρέχει και συνεπώς δεν καταναλώνει CPU και μπαταρία και η RAM αποδεσμεύεται στη συνέχεια εάν χρειαστεί.
Το iOS διαθέτει πέντε καταστάσεις για τις εφαρμογές. Αυτές είναι:
Not running - η εφαρμογή έχει τερματιστεί ή δεν έχει ανοιχτεί καν.
Inactive - η εφαρμογή βρίσκεται στην οθόνη αλλά δεν εκτελεί τίποτα (για παράδειγμα όταν η εφαρμογή είναι ανοιχτή αλλά η συσκευή κλειδωμένη).
Active - η συνηθισμένη κατάσταση που χρησιμοποιούμε μια εφαρμογή.
Background - η εφαρμογή δεν βρίσκεται στην οθόνη αλλά εκτελεί ακόμα κώδικα.
Suspended - η εφαρμογή καταλαμβάνει μνήμη RAM αλλά δεν εκτελεί κώδικα.
Οι καταστάσεις Active και Inactive δεν θα μας απασχολήσουν και θα επικεντρωθούμε στο τι συμβαίνει όταν μια εφαρμογή πάει από το Active στο Background στο Suspended και στο Not Running.
Όταν πατάμε το home button η εφαρμογή από Active γίνεται Background. Όλες σχεδόν οι εφαρμογές μετατρέπονται μετά σε Suspended σε μερικά δευτερόλεπτα. Τεχνικά οι εφαρμογές αυτές παραμένουν στην μνήμη της συσκευής έτσι ώστε να ανοιχτούν πολύ γρηγορότερα κάποια στιγμή αργότερα. Δεν χρησιμοποιούν, όμως, επεξεργαστική ισχύ (CPU) και συνεπώς ούτε μπαταρία.
Δεν απαιτείται, επίσης, να κλείσετε εσείς την εφαρμογή για να εξοικονομήσετε μνήμη αφού το iOS αναλαμβάνει αυτή την δουλειά. Εάν χρειαστεί να ανοιχτεί μια εφαρμογή που χρειάζεται επιπλέον μνήμη, τότε το σύστημα αυτόματα θα αρχίσει να μετατρέπει παλαιότερες εφαρμογές από Suspended σε Not Running. Εάν, τότε, ανοίξετε ξανά μια από αυτές τις εφαρμογές θα ανοίξει από την αρχή σε καθαρή κατάσταση.
Προσέξτε τώρα: όλα τα παραπάνω δεν έχουν καμία σχέση με το τι βλέπετε στην multitasking bar. Η multitasking bar υπάρχει μόνο και μόνο για να μπορείτε να δείτε τις εφαρμογές που έχετε χρησιμοποιήσει πρόσφατα ανεξάρτητα από την κατάσταση (Background, Suspended, Not Running) στην οποία βρίσκονται. Για αυτό, άλλωστε, δεν μπορείτε να δείτε στην multitasking bar την εφαρμογή που έχετε ανοιχτή στην οθόνη σας αυτή την στιγμή.
Background Tasks
Όταν μια εφαρμογή στέλνεται στο Background, τότε μετατρέπεται σε Suspended σε λίγα δευτερόλεπτα όπως είπαμε. Ωστόσο, μερικές εφαρμογές μπορούν να ζητήσουν μια ‘επιμήκυνση’ αυτού του χρόνου για να πραγματοποιηθεί ένα background task.
Για παράδειγμα, μια τέτοια εφαρμογή είναι το Instacast, μια εφαρμογή διαχείρισης podcasts. Όταν το Instacast είναι Active ξεκινά να κατεβάζει νέα podcasts. Εάν πατηθεί το home button, τότε το Instacast έχει πέντε δευτερόλεπτα για να τρέξει στο Background και μετά να γίνει Suspended. Ωστόσο, το Instacast έχει τη δυνατότητα να δηλώσει ένα background task και να επιμηκύνει την περίοδο που μπορεί να μείνει στο Background για να συνεχίσει να κατεβάζει τα podcasts. Αυτή η περίοδος, βέβαια, δεν είναι απεριόριστη και περιορίζεται περίπου στα 10 λεπτά προτού αναγκαστεί να γίνει Suspended. Αυτό γίνεται αυτόματα από το iOS χωρίς να πρέπει να κάνετε κάτι.
Απεριόριστο Background
Όλες οι εφαρμογές έχουν μπορούν να μείνουν στο Background από 5 δευτερόλεπτα μέχρι 10 λεπτά, όπως είδαμε. Υπάρχουν, όμως, και μερικά είδη εφαρμογών που χρειάζεται να τρέχουν απεριόριστα στο background. Συγκεκριμένα, υπάρχουν πέντε είδη εφαρμογών: εφαρμογές που παίζουν μουσική, εφαρμογές που καταγράφουν την τοποθεσία, εφαρμογές που περιμένουν εισερχόμενες κλήσεις VOIP (πχ Skype), εφαρμογές του Newsstand για να κατεβάσουν νέο περιεχόμενο και εφαρμογές που συνεργάζονται με κάποιο εξωτερικό αξεσουάρ.
Οποιαδήποτε καλογραμμένη εφαρμογή που ανήκει σε μία από τις παραπάνω κατηγορίες γίνεται αυτόματα Suspended όταν δεν εκτελούν κάποια εργασία. Για παράδειγμα, όταν το Instacast τελειώσει την αναπαραγωγή ενός podcast γίνεται Suspended. Υπάρχουν και προ-εγκατεστημένες εφαρμογές στο iOS που τρέχουν στο παρασκήνιο συνεχώς, όπως το Mail.
Όσο οι εφαρμογές αυτές βρίσκονται στο Background, τότε θα συνεχίσουν να καταναλώνουν CPU και μπαταρία. Γενικότερα, γνωρίζετε πότε τρέχουν τέτοιες εφαρμογές αφού η κατάστασή τους είναι προφανής.
Τώρα, υπάρχει μια εξαίρεση στον κανόνα του ότι ο χρήστης δεν χρειάζεται ποτέ να διαχειρίζεται εφαρμογές στη multitasking bar και αυτή είναι όταν μια από τις εφαρμογές που τρέχουν απεριόριστα συμπεριφερθεί αλλόκοτα και δεν τερματιστεί σωστά. Αυτή η περίπτωση είναι γενικότερα σπάνια, βέβαια, και δεν αποτελεί μέρος της φυσιολογικής εμπειρίας ενός χρήστη iOS.
Περίληψη
Συνοπτικά, ας δούμε τι μάθαμε:
-Εάν κάποιος σας πει ότι όλες οι εφαρμογές στην multitasking bar τρέχουν ή χρησιμοποιούν μπαταρία κτλπ είναι λάθος.
-Όταν πατάτε το home button η εφαρμογή μετατρέπεται από Active σε Background και πολύ γρήγορα σε Suspended όπου δεν καταναλώνει μπαταρία.
-Μια εφαρμογή μπορεί να ζητήσει επιμήκυνση της κατάστασης Background για περίπου 10 λεπτά προτού γίνεται Suspended.
-Εάν υπάρξει πρόβλημα διαχείρισης μνήμης, τότε το iOS αυτόματα μετατρέπει τις Suspended εφαρμογές σε Not Running και επανακτά τη μνήμη τους.
-Πέντε είδη εφαρμογών -ήχου, GPS, VOIP, Newsstand και χρήσης αξεσουάρ- και μερικές προ-εγκατεστημένες μπορούν να τρέχουν απεριόριστα στο παρασκήνιο μέχρι να ολοκληρωθεί η εργασία τους.
Γενικότερα, δεν χρειάζεται να ανησυχείτε για τα background tasks στο iOS. Το λειτουργικό μπορεί να χειριστεί σχεδόν οποιαδήποτε περίπτωση εφαρμογών και όσον αφορά αυτά τα πέντε είδη εφόσον η εφαρμογή είναι σωστά γραμμένη δεν θα έχετε κάποιο πρόβλημα.