Κατανοώντας το Multitasking στο iPhone OS 4.0

com.apple.iphone-3g.png
Με το που εμφανίστηκε το iPhone, οι πρώτες αρνητικές αντιδράσεις είχαν να κάνουν με την έλειψη multitasking. Τι είναι όμως το multitasking και ποιό ήταν το όραμα του development team της Apple για την υλοποίηση του στο iPhone OS? Σύμφωνα με τους προγραμματιστές, ένα σύστημα υποστηρίζει multitasking όταν περισσότερες απο μια διεργασίες που καταλαμβάνουν επεξεργαστική ισχύ και μνήμη λειτουργούν ταυτόχρονα. Σύμφωνα με αυτό, το iPhone OS ήταν, είναι, και θα είναι multitasking αφου έχει σα βάση το UNIX και ως εκ τούτου βασίζεται σε παραπάνω απο μια διεργασίες για να λειτουργήσει.Αυτό που δέν υποστηρίζει, και είναι το παράπονο των χρηστών, είναι η ταυτόχρονη λειτουργία πολλών third party εφαρμογών, κάτι που αφορά τον χρήστη και όχι το σύστημα. Multitasking για τον χρήστη λοιπόν...
Το πρόβλημα είναι οτι αν έχουμε πολλές εφαρμογές ανοιχτές σε μια τέτοια συσκευή, η συστευή αργεί, ζεσταίνεται, και καταναλώνει πάρα πολύ γρήγορα τα αποθέματα της μπαταρίας, με το σκεπτικό ότι σε μια τόσο μικρή οθόνη δε μπορούμε να δούμε παραπάνω απο μια εφαρμογή, αποφάσισαν οτι θα ήταν καλύτερο να κλείναμε τη μία, και να ανοίγαμε την άλλη, έτσι δε θα τρέχουν περιτές διεργασίες στο παρασκήνιο, και δε θα έχουμε τα προβλήματα που αναφέραμε παραπάνω, γι'αυτό και κλείδωσαν τη αυτη δυνατότητα. Έτσι όμως εμφανίζονται άλλα προβλήματα, ένα παράδειγμα, άν στέιλω ενα email με διάφορα αρχεία, και βγώ απο την εφαρμογή πρίν τελειώσει την αποστολή, τότε το mail δέ θα έφτανε ποτέ στο προορισμό του, ή εάν μίλαγα στο skype και πάταγα το home button τοτε όχι απλά θα κοβόταν η συνομιλία μου αλλά θα έβγαινα offline απο την υπηρεσία του skype... Η Apple είδε αυτά τα προβλήματα, και εντόπισε τις λειτουργίες αυτές που θα πρέπει να συνεχίζουν στο παρασκήνιο για να μή συμβαίνουν όλα αυτά. Στη συνέχεια υλοποίησε κάποια services στο ίδιο το λειτουργικό που θα προσφέρουν αυτές τις υπηρεσίες στις εφαρμογές, και το αποτέλεσμα είναι κάτι που μοιάζει με multitasking αλλα δεν είναι και ο τελικός χρήστης δε θα καταλάβει τη διαφορά, φανταστήτε το σα να κάνει μερικές εξαιρέσεις στο κλείδωμα που έχει επιβάλει.
Πώς λειτουργουν όμως αυτά τα 7 services και τι κάνει το καθένα ? η απάντηση είναι σχετικά απλή. Τα services είναι τα: Background audio, Voice over IP, Background location, Push notifications, Local notifications, Task finishing και Fast app switching. Αυτά τρέχουν συνέχεια στο παρασκήνιο και το καθένα περιμένει μία εφαρμογή να τα χρησιμοποιήσει. Η Apple φυσικά δημιούργησε τα απαραίτητα APIs που χρειάζονται οι προγραμματιστές ώστε να κάνουν τις εφαρμογές τους να εκμεταλευτούν αυτά τα services. Για να δούμε όμως τί κάνει το καθένα απ'αυτά.Το σημαντικότερο όλων είναι το Fast app switching, είναι η βάση του συστήματος "multitasking" που θα χρησιμοποιήσει η Apple και προτρέπει όλους τους προγραμματιστές να το ενσωματώσουν στις εφαρμογές τους. Συγκεκριμένα αυτή η υπηρεσία, "παγώνει" μια εφαρμογή, και τη μεταφέρει απο τη μνήμη ram στη κύρια μνήμη, έτσι δέ χρησιμοποιεί ούτε επεξεργαστική ισχύ, αλλα ούτε και μνήμη ram. Οταν χρειαστεί να ξαναχρησιμοποιηθεί η εφαρμογή, την επαναφέρει στη ram και συνεχίζει απο εκεί που είχε μείνει. Ενα άλλο σημαντικό service είναι το Task finishing. Με αυτό η εφαρμογή ζητάει να λειτουργεί κανονικά στο παρασκήνιο αλλα για πεπερασμένο χρονικό διάστημα, τόσο όσο χρειάζεται για να μπορέσει να τελειώσει την εργασία που εκτελεί εκείνη τη στιγμή. Μόλις η εργασία τελειώσει τότε η εφαρμογή σταματάει να λειτουργεί αφού αναλαμβάνει το Fast app switching. Το Local notifications, είναι ένα service που, ας πούμε, κρατάει παραγγελίες απο τις εφαρμογές για να ειδοποιήσει τους χρήστες. Έτσι αν έχω προγραμματίσει μία εφαρμογή να μου υπενθυμήσει ένα γεγονός, η εφαρμογή λέει στο Local notifications service να κάνει αυτό τη δουλειά εκ μέρους της. Το Push notifications είναι μία υπηρεσία που λειτουργεί απο το καλοκαίρι, βασίζεται σε servers της Apple και χρησιμοποιήται κυρίως σε προγράμματα instant messaging, έτσι ώστε να λαμβάνουν μυνήματα ενώ στη πραγματικότητα τα προγράμματα αυτά δε τρέχουν, είναι σα να λέμε remote notification, το αντίθετο δηλαδή της προηγούμενης υπηρεσίας, ονομάζεται όμως Push γιατί η υπηρεσία "σπρώχνει" τα μυνήματα πρός τη συσκευή, κλασσικό παράδειγμα το email, ένας υπολογιστής συνδέεται σε ενα σέρβερ και "τραβάει" τα καινούργια μυνήματα, σε αυτή τη περίπτωση όμως, είναι οι servers που προωθούν, "σπρώχνουν", τα μυνήματα προς τη συσκευή. Background location, αυτό το service έχει 2 μέρη, το ένα είναι να αφήνει μια εφαρμογή να χρησιμοποιεί το GPS και να μας καθοδηγεί ακόμα και όταν φέρουμε κάποια άλλη εφαρμογή στο προσκήνιο, είναι αρκετά κακό για τη μπαταρία, αλλά η λογική είναι να το χρησιμοποιούμε μέσα σε αυτοκίνητο με Dock οπότε θα φορτίζεται ταυτόχρονα, και το δεύτερο κομμάτι είναι ένας οικονομικότερος για τη μπαταρία τρόπος που θα εντοπίζει περιοδικά τη τοποθεσία μας μέσω των πύργων κινητής τηλεφωνίας, ωστε να τη χρησιμοποιήσουν κυρίως εφαρμογές social networking όπως το loopt ή το Google Latitude. Το Voice over IP είναι το service που θα αναλαμβάνει τις VoIP κλήσεις, ώστε να μένουν ενεργές ακόμα και στο παρασκήνιο μέχρι να ολοκληρωθούν. Και τέλος το Background audio service που αναλαμβάνει την αδιάκοπη παροχή ήχου απο μία εφαρμογή, και θα χρησιμοποιηθεί κυρίως σε εφαρμογές internet radio ωστε να ακούμε την αγαπημένη μας εκπομπή αλλα να μπορούμε να κάνουμε και άλλα πράγματα ταυτόχρονα.
Multitasking λοιπόν... περίπου... εγώ πάντως ανυπομονώ να το δώ απο κοντά, ίσως είναι τόσο καλό ωστε να παραδειγματιστούν και οι υπόλοιπες εταιρίες και να ανέβει λίγο η ποιότητα του software στην αγορά, αφου μέχρι στιγμής ότι multitasking implementation έχω δεί σε τέτοιες συσκευές είναι απλά χάλια.