Στα βαθιά του OS 4.0: iPhone Multitasking vs. Mac OS X και Android
Ήθελα εδώ και καιρό να γράψω με λεπτομέρειες κάποια πράγματα για την OS 4.0 και πιο συγκεκριμένα για το multitasking σε αυτή. Πριν λίγες μέρες έπεσα στο καταπληκτικό άρθρο του Darien Eran Dilger στο AppleInsider. Αντί λοιπόν να γράψω κάτι δικό μου έκατσα και μετέφρασα όλο του το άρθρο προτιμώντας να μη δώσω απλά ένα link το οποίο οι περισσότεροι θα επέλεγαν να προσπεράσουν. Το αυθεντικό άρθρο για όποιον προτιμάει να το διαβάσει στα Αγγλικά βρίσκεται εδώ. Επαναλαμβάνω ότι το άρθρο δεν είναι δικό μου, αλλά προέρχεται από το AppleInsider. Ζητώ εκ των προτέρων συγγνώμη για πιθανά μικρά λάθη που μπορεί να μου ξέφυγαν κατά τη διάρκεια της μετάφρασης.
———————————————————————————-
Το πώς δουλεύουμε σε ένα smartphone είναι πολύ διαφορετικό από το πώς δουλεύουμε σε έναν επιτραπέζιο υπολογιστή. Η πραγματικότητα αυτή ισχύει ιδιαίτερα όταν πρόκειται για το multitasking. Οι προσεγγίσεις στο multitasking από το Android της Google και από την επικείμενη έκδοση 4.0 του iPhone OS είναι επίσης πολύ διαφορετικές. Ας δούμε τη σύγκριση…
Desktop Multitasking
Σε ένα desktop σύστημα που εκτελεί το Mac OS X, δεν θέλουμε απλά να έχουμε πολλές εφαρμογές ανοικτές που θα τρέχουν, η καθεμία με το δικό της ανοιχτό παράθυρο. Θέλουμε επίσης πολλά πράγματα να συμβαίνουν στο παρασκήνιο, γιατί αλλιώς τα ακριβά CPU και GPU παραμένουν σε αδράνεια, όταν θα μπορούσαν να κάνουν χρήσιμα πράγματα.
Κατά την τελευταία δεκαετία της ανάπτυξης του Mac OS X, η Apple έχει προσθέσει πολλές νέες τεχνολογίες για να διατηρεί σωστά τους επεξεργαστές σε λειτουργία. Το συγκεκριμένο λειτουργικό σύστημα έκανε το ντεμπούτο του το 2001 με μια φανταχτερή νέα compositing μηχανή γραφικών, η οποία σε κάθε νέα έκδοση έδινε στη CPU (και αργότερα στις GPUs) επιπλέον δουλειά στο παρασκήνιο (διάφορα εφφέ, εναλλαγές, κλπ).
Το Mac OS X έχει επίσης το Spotlight indexing που συμβαίνει σε τακτά χρονικά διαστήματα, το αυτόματο defragmentation στο σύστημα αρχείων, το Time Machine backup που παρακολουθεί συνέχεια τις αλλαγές στα αρχεία, κλπ. Όσο γρηγορότερα γίνονται τα Mac, τόσες περισσότερες διεργασίες μπορεί το σύστημα να ρίξει στο παρασκήνιο χωρίς τον κίνδυνο καθυστερήσεων στην εκτέλεση των λειτουργιών.
Πολλές από τις νέες βελτιώσεις στο Snow Leopard έχουν επικεντρωθεί γύρω από το πώς να διαχειρίζονται πιο αποτελεσματικά τα καθήκοντα του συστήματος εκμεταλλευόμενα σωστά τους πυρήνες του επεξεργαστή που διαθέτει το σύστημα (Grand Central Dispatch), καθώς και τη σωστή εκμετάλλευση της GPU όταν αυτή βρίσκεται σε αδράνεια (OpenCL). Όσα περισσότερα μπορεί να κάνει ο υπολογιστής στο παρασκήνιο τόσο πλουσιότερη εμπειρία χρήσης μπορεί να προσφέρει.
Mobile Multitasking
Όταν το iPhone εμφανίστηκε και έκανε το ντεμπούτο του φορώντας μια παραλλαγή του Mac OS X, οι στόχοι για το σχεδιασμό του νέου αυτού λειτουργικού συστήματος έπρεπε να επαναπροσδιοριστούν. Όταν ένα σύστημα περιορίζεται από τη μπαταρία του, δεν θέλουμε πραγματικά να μπορεί να κάνει πολλά πράγματα στο παρασκήνιο. Θέλουμε τα περισσότερα να παραμένουν σε αδράνεια για να μην υπάρχει κόστος σε ενέργεια.
Φυσικά, εξακολουθούν να υπάρχουν πολλά που πρέπει να γίνονται και σε μια mobile συσκευή, και σε πολλές περιπτώσεις, ακόμη περισσότερα από ένα τυπικό desktop. Για παράδειγμα, υπάρχει συνεχής ανάγκη ελέγχου για εισερχόμενες κλήσεις ή μηνύματα SMS. Αυτό σημαίνει ότι η baseband πρέπει να παρακολουθεί συνεχώς την πλησιέστερη κεραία που θα προσφέρει επαρκές σήμα, ώστε να είναι έτοιμη να δεχτεί τις εισερχόμενες κλήσεις ή μηνύματα.
Η διαχείριση ενέργειας σίγουρα δεν ήταν μία εντελώς νέα ιδέα. Η Apple πουλαει φορητούς υπολογιστές για σχεδόν είκοσι χρόνια, και δημιουργεί ολοένα και πιο εξελιγμένες μεθόδους για τον τερματισμό του περιττού hardware για τη διατήρηση της ζωής της μπαταρίας.
Αλλά σε μια φορητή φορητή συσκευή όπως το iPhone, δεν είναι μόνο η διαχείριση της ισχύος του hardware που πρέπει να υπολογιστεί. Υπάρχει επίσης ένα ριζικά νέο περιβάλλον εργασίας για τη χρήση των εφαρμογών. Η Apple έχει επενδύσει πολύ στο πώς μπορεί να παραδώσει καλύτερα μια φορητή συσκευή που θα μπορεί να ισορροπεί τα χαρακτηριστικά και της λειτουργίες της με μια αποδεκτή διάρκεια ζωής της μπαταρίας.
Not Multitasking on Purpose
Μια σημαντική απόφαση στο σχεδιασμό του iPhone ήταν να περιοριστεί αποτελεσματικά το multitasking στις βασικές εφαρμογές του συστήματος, συμπεριλαμβανομένων των τηλεφώνου, SMS, iPod, clock, καθώς και των processes που υποστηρίζουν αυτές και παρόμοιες λειτουργίες. Όταν εμφανίστηκαν οι 3rd party εφαρμογές με το iPhone 2.0, δεν υπήρχε καμία πρόβλεψη για τη λειτουργία αυτών στο παρασκήνιο.
Η εξήγηση της Apple ήταν ότι η δυνατότητα 3rd party apps να τρέχουν ταυτόχρονα θα κατανάλωνε απλά πάρα πολύ μπαταρία ενώ θα εμφάνιζε πιθανά προβλήματα ασφάλειας, και θα χρειαζόταν η παροχή ενός χειροκίνητου τρόπου διαχείρισης των διεργασιών που θα βρίσκονταν στο παρασκήνιο ώστε να μην καταναλώνουν όλους τους διαθέσιμους πόρους του συστήματος.
Αντ ‘αυτού, η Apple είπε ότι έψαχνε μια λύση για την πρωτογενή αιτία που οι εφαρμογές θα ήθελαν να τρέχουν στο παρασκήνιο: τον έλεγχο για εξωτερικές ενημερώσεις πληροφοριών. Η λύση έκανε την εμφάνισή της αργότερα από το αναμενόμενο, δεδομένου ότι η Apple συνειδητοποίησε πόσο δύσκολο ήταν το συγκεκριμένο εγχείρημα. Έτσι εμφανίστηκαν αρχικά τα Push Notifications που επέτρεπαν στις εφαρμογές να λαμβάνουν εξωτερικές ενημερώσεις πληροφοριών χωρίς να τρέχουν στο παρασκήνιο, απλά επικοινωνώντας με τους εκάστοτε servers ζητώντας νέα δεδομένα.
Δεν υπήρχε κάποιος τεχνικός περιορισμός που απέτρεπε τη λειτουργία multitasking των 3rd party apps. O περιορισμός αυτός επιβλήθηκε τεχνητά και εσκεμμένα από την Apple για την απλούστευση και τη βελτιστοποίηση της απόδοσης των κινητών συσκευών της. Με το jailbreak, οι χρήστες μπορούν παρόλα αυτά να ενεργοποιήσουν ένα άναρχο multitasking για τις 3rd party εφαρμογές. Ωστόσο, αυτό οδηγεί σε μείωση της διάρκειας ζωής της μπαταρίας και της απόδοσης της συσκευής και ο χρήστης θα πρέπει να διαχειριστεί την όλη κατάσταση μόνος του.
Φαινομενικό Multitasking
Η Google εφάρμοσε το multitasking στο Android που λειτουργεί πολύ διαφορετικά από ό,τι το multitasking σε ένα desktop σύστημα. Στην πραγματικότητα, είναι τόσο διαφορετικά που σχεδόν προκαλεί σύγχυση το ότι και τα δύο χρησιμοποιούν την ίδια λέξη (το multitasking δηλαδή).
Σε ένα desktop σύστημα, πολλαπλές εφαρμογές που είναι όλες ανοιχτές ταυτόχρονα (μαζί με τα background processes) είναι όλες σε θέση να λειτουργούν και ταυτόχρονα. Όταν το mouse κινείται σε κάθε εφαρμογή και κάνει click σε διάφορα πράγματα, υπάρχουν πληροφορίες που αποστέλλονται στην εκάστοτε εφαρμογή. Είναι όλες ανοιχτές και ενεργές, αν και κάθονται στο παρασκήνιο και ουσιαστικά δεν κάνουν τίποτα, χωρίς να καταναλώνουν επεξεργαστική ισχύ και μνήμη (χάρη στον μηχανισμό της εικονικής μνήμης), μέχρις ότου ο χρήστης τις ενεργοποιήσει.
Στο Android, όταν ένας χρήστης μετακινείται από το ένα app στο άλλο, η λειτουργία της εφαρμογής που πάει στο παρασκήνιο αναστέλλεται. Αυτό είναι σαν να μπαίνει σε κώμα: καταλαμβάνει μνήμη (η οποία είναι περιορισμένη σε μια κινητή συσκευή), αλλά δεν μπορεί να ανταποκριθεί σε οτιδήποτε ή να συνεχίσει το έργο της ή να ξεκινήσει οποιαδήποτε νέα λειτουργία. Σε περίπτωση που το σύστημα αρχίσει να ξεμένει από μνήμη, ξεκινά την αποθήκευση της κατάστασης των εφαρμογών που είναι στο παρασκήνιο και τον τερματισμό τους.
Οι τερματισμένες εφαρμογές φαίνονται να εξακολουθούν να είναι σε λειτουργία. Όταν ο χρήστης ξαναμεταφέρεται στην τερματισμένη εφαρμογή, αυτή εκτελείται εκ νέου και μεταφέρει την αποθηκευμένη κατάσταση της από το σύστημα έτσι ώστε να φορτώσει με τέτοιο τρόπο που φαίνεται ότι τίποτα δεν συνέβη ποτέ και λειτουργούσε ενεργά στο παρασκήνιο. Μέχρι στιγμής, αυτό δεν είναι πραγματικό multitasking με κανέναν τρόπο, αλλά απλώς ένας γρηγορότερος τρόπος για εναλλαγή μεταξύ των εφαρμογών που επί της ουσίας τρέχουν μια την κάθε φορά όπως μέχρι τώρα στο iPhone.
Δαπανηρό multitasking με τα Services
Προκειμένου να μπορούν να λειτουργούν στο παρασκήνιο, οι Android εφαρμογές πρέπει να παρέχουν μια ουσιώδη «υπηρεσία» (service), που εκμεταλλεύεται τις εργασίες που μπορούν να πραγματοποιούνται ακόμα και όταν η εφαρμογή έχει τερματιστεί (suspended). Ένα τέτοιο service στο Android χρησιμοποιεί ένα client / server μοντέλο για την εκτέλεση των καθηκόντων στο παρασκήνιο, όπως την αναπαραγωγή μουσικής ή τμημάτων ενός διακομιστή για νέα μηνύματα.
Συχνά, είναι αυτά τα Services που πιθανόν τρώνε τη μπαταρία σε μια Android συσκευή, γιατί μπορούν να ανοίξουν συνδέσεις δικτύου με απομακρυσμένους servers και αυτές οι συνδέσεις να παραμένουν ανοιχτές. Αυτό αναγκάζει το 3G ή το WiFi να παραμείνει συνεχώς ενεργό, το οποίο αποτελεί έναν από τους πιο γρήγορους τρόπους για να αδειάσει η μπαταρία σε μια φορητή συσκευή.
Ένα τέτοιο service μπορεί να ενεργοποιήσει για παράδειγμα το GPS για την απόκτηση τακτικών ενημερώσεων τοποθεσίας. Αυτό μπορεί να είναι ακόμη πιο δαπανηρό από την άποψη της διάρκειας ζωής της μπαταρίας, αφού το GPS κάνει χρήση τόσο του δικτύου κινητής τηλεφωνίας όσο και της κεραίας GPS (μιας και οι κεραίες κινητής τηλεφωνίας συνδράμουν στην καλύτερη λειτουργία του GPS). Αυτά τα services μπορούν επίσης να καταναλώνουν ακόμα και τη διαθέσιμη μνήμη RAM και τη CPU αλλά η ζωή της μπαταρίας είναι συνήθως το βασικό πρόβλημα.
Multitasking στο iPhone 4.0 έναντι του Android
Η Apple σίγουρα γνώριζε με ποιό τρόπο είχε σχεδιαστεί το multitasking μοντέλο στο Android, και δεν υπάρχει και κάποια απόδειξη ότι η Google είχε κατοχυρώσει με δίπλωμα ευρεσιτεχνίας το concept των services στο ανοιχτού κώδικα λειτουργικό της σύστημα. Έτσι, το γεγονός ότι η Apple δεν αντέγραψε ολόκληρο το μοντέλο της Google για το multitasking δείχνει ότι ο Steve Jobs δεν μιλούσε αόριστα, όταν είπε ότι η Apple είχε μελετήσει το πρόβλημα και διαμόρφωσε την δική της προσέγγιση για το multitasking που θεωρεί ότι είναι καλύτερη.
Ταυτόχρονα, ορισμένες πτυχές των νέων APIs για το multitasking της Apple είναι πολύ παρόμοιες με αυτές στο Android. Σύμφωνα με μια γενική επισκόπηση των διαφορών σε Android και iPhone 4.0 του David Quintana, το «προφανές multitasking» του iPhone 4.0, το οποίο η Apple αποκαλεί «Fast App Switching,» είναι σχεδόν πανομοιότυπο με των τερματισμό (suspension) των εφαρμογών του Android που περιγράφεται ανωτέρω.
Όταν γίνεται εναλλαγή από το ένα στο άλλο app στο iPhone 4.0, το προηγούμενο app διατηρείται στη μνήμη, αλλά κάθε δραστηριότητα του έχει παγώσει. Όπως προαναφέρθηκε, αυτό δεν είναι πραγματικά multitasking κατά την έννοια του desktop multitasking, αλλά απλά μια ψευδαίσθηση ότι οι πολλαπλές εφαρμογές τρέχουν, όταν δεν το κάνουν πραγματικά. Είναι απλά έτοιμες να τρέξουν και πάλι μόλις ο χρήστης μεταφερθεί ξανά σε αυτές: εξ ου και η ονομασία Fast App Switching.
Πριν η Apple ανακοινώσει το μηχανισμό αυτό, πολλοί προγραμματιστές iPhone είχαν εκφράσει την ιδέα ότι το σύστημα δεν είχε πραγματικά ανάγκη για «multitasking» παρά για ένα concept μιας «αποθηκευμένης κατάστασης» η οποία θα επέτρεπε στους χρήστες την ταχεία εναλλαγή μεταξύ των apps. Αυτό είναι ακριβώς αυτό που κάνει το Fast App Switching.
Ακριβώς όπως με το Android, το iPhone OS 4.0 μπορεί να διεκδικήσει εκ νέου μνήμη «αποθηκεύοντας» και στη συνέχεια τον τερματίζοντας/παγώνοντας (suspension) τις εφαρμογές που έχουν σταλεί στο παρασκήνιο, έτσι ώστε όταν ο χρήστης επιστρέψει, η εφαρμογή να μπορεί να συνεχίσει εκ νέου από ίδιο σημείο που ήταν όταν ο χρήστης την εγκατέλειψε. Ωστόσο, σε αντίθεση με το Android, το iPhone OS 4.0 παρουσιάζει έναν απλό τρόπος για να κλείνει τελείως μια ενεργή εφαρμογή χωρίς να χρειάζεται ένα βοηθητικό πρόγραμμα διαχείρισης των processes, όπως TasKiller.
Επειδή το πάτημα του κουμπιού Home πλέον δεν κλείνει την εφαρμογή, η Apple ενεργοποίησε τη δυνατότητα του παρατεταμένου πατήματος του Home Button που εμφανίζει ένα κόκκινο badge πάνω στις εφαρμογές που τρέχουν (σαν το σήμα του delete) το οποίο μπορεί να χρησιμοποιηθεί για τον ολοκληρωτικό τερματισμό της εκάστοτε εφαρμογής όπως έκανε μέχρι τώρα το Home Button. Δεν υπάρχει χειροκίνητη διαχείριση των apps και των processes του συστήματος που θα μπορούσε να οδηγήσει σε απρόβλεπτα προβλήματα για τους χρήστες.
Παρεμπιπτόντως, αυτό το είδος του «φαινομενικού multitasking» είναι αυτό που η Microsoft σκοπεύει να χρησιμοποιήσει στα Windows Phone 7 στο τέλος του έτους. Και για άλλη μια φορά, ώστε να δοθεί έμφαση: αυτή η πτυχή του multitasking δεν είναι πραγματικά για την εκτέλεση πολλών εφαρμογών ταυτόχρονα όπως συμβαίνει σε ένα περιβάλλον επιφάνειας εργασίας. Εδώ το θέμα είναι να μένουν οι εφαρμογές στη μνήμη ώστε να μπορείτε να μεταβείτε γρήγορα μεταξύ τους.
Πιο αποτελεσματικό multitasking στο iPhone OS 4.0
Προχωρώντας πέρα από το φαινομενικό multitasking των Windows Phone 7, το iPhone 4.0 θα υποστηρίξει επίσης συγκεκριμένα tasks σε 3rd party εφαρμογές που οι χρήστες θα θέλουν να συνεχίζουν στο παρασκήνιο όταν φεύγουν από αυτές. Αυτό είναι εννοιολογικά παρόμοιο με τα services στο Android, αλλά εφαρμόζεται με ένα νέο τρόπο. Όπως γράφει ο Quintana, σχετικά με το iPhone 4.0: «O τρόπος λειτουργίας του background processing στο iPhone OS 4.0 είναι εντελώς διαφορετικός από αυτόν του Android».
Μια βασική διαφορά, o Quintana σημειώνει, είναι ότι δεν υπάρχει η έννοια των services στο iPhone 4.0. Οι εφαρμογές δεν παρέχουν το στοιχείου του background client/server. Αντ ‘αυτού, η Apple ανέπτυξε ένα σύνολο κανόνων που οι εφαρμογές πρέπει να ακολουθήσουν προκειμένου να συνεχίσουν να εκτελούν τα καθήκοντα τους αφού ο χρήστης βγει από αυτές.
Η ιδέα των εφαρμογών να συνεχίσουν να εργάζονται αφού ο χρήστης βγει από αυτές δεν είναι νέα για το iPhone. Είναι μόνο νέα για τις 3rd party εφαρμογές. Η εφαρμογή του τηλεφώνου (Phone.app) της Apple ήδη το κάνει αυτό. Με μια κλήση σε εξέλιξη, ο χρήστης μπορεί να πατήσει το κουμπί Home και να περιηγηθεί στο διαδίκτυο ή να αναζητήσει μια επαφή ή να ελέγξει το email, ενώ η εφαρμογή του τηλεφώνου παραμένει στην κλήση.
Το ίδιο συμβαίνει και με το iPod app, το οποίο μπορεί να συνεχίσει να παίζει μουσική. Τα SMS και Mail συνεχίζουν να λαμβάνουν τα μηνύματα στο παρασκήνιο και ούτω καθεξής. Ωστόσο, αυτό θα μπορούσε γρήγορα να αποτελέσει πρόβλημα για τους χρήστες, αν όλες οι εφαρμογές που εγκαθιστούσαν κατανάλωναν πόρους χωρίς περιορισμούς κάνοντας για παράδειγμα διαρκείς ελέγχους για μηνύματα, ενημερώσεις και γενικά συνέχιζαν τη λειτουργία τους απρόσκοπτα στο παρασκήνιο.
Προκειμένου να εξισορροπηθούν οι επιθυμίες των χρηστών που θέλουν να κάνουν ταυτόχρονα πολλές εργασίες με αυτές των χρηστών που θέλουν η συσκευή τους να συμπεριφέρεται άψογα χωρίς καθυστερήσεις και προβλήματα σε όλη τη διάρκεια λειτουργίας της, η Apple όρισε έναν πεπερασμένο αριθμό εργασιών που μπορούν να εκτελούνται στο παρασκήνιο τις οποίες μπορούν να χρησιμοποιήσουν οι 3rd party εφαρμογές, καθώς και κανόνες που διασφαλίζουν την όσο το δυνατόν αποδοτικότερη λειτουργία της συσκευής.
System-Wide Notifications ως προαπαιτούμενο για αποτελεσματικό Multitasking
Το πρώτο βήμα προς αυτή την κατεύθυνση ξεκίνησε πέρυσι: Push Notifications. Αντί οι εφαρμογές να κάθονται στο παρασκήνιο ή να καταναλώνουν αβίαστα διάφορα services στο παρασκήνιο προκειμένου να επικοινωνούν με servers για λήψη νέων πληροφοριών, η Apple δημιούργησε μια ευρέος φάσματος υπηρεσία που λάμβανε αποτελεσματικά ενημερώσεις για λογαριασμό των εφαρμογών του χρήστη και τις παρουσίαζε σε αυτόν με τη μορφή Ειδοποιήσεων με τις οποίες ο χρήστης μπορούσε κατά βούληση να δουλέψει εκτελώντας μέσω αυτών τις εκάστοτε εφαρμογές που έστελναν την ειδοποίηση.
Αυτό είναι κάτι που σε άλλες πλατφόρμες δεν υπάρχει. Ακόμη και στης RIM το Blackberry, το οποίο εξυμνείται για την ώθηση της μηνυμάτων του (Push messaging), μόλις πρόσφατα άνοιξε μια υπηρεσία για δημόσια ώθηση μηνυμάτων για λογαριασμό των 3rd party εφαρμογών. Το αποτέλεσμα αυτού είναι ότι οι περισσότερες εφαρμογές για Blackberry έχουν ήδη σχεδιαστεί για να επικοινωνούν αναποτελεσματικά με τους servers τους για ενημερώσεις επειδή το άναρχο multitasking ήταν ήδη εκεί για να τους επιτρέψει να πάρουν το «λάθος δρόμο». Εξ αποτελέσματος, οι χρήστες πληρώνουν με μικρότερη διάρκεια ζωής της μπαταρίας.
Οι Android εφαρμογές ομοίως προκαλούν προβλήματα στη διάρκεια ζωής της μπαταρίας επειδή κάθε μια μπορεί στο παρασκήνιο να τραβάει ενημερώσεις αντί να λειτουργεί υπό την ομπρέλα ενός ενοποιημένου συστήματος που θα ελέγχει για νέες ενημερώσεις ακόμα και όταν οι εφαρμογές αυτές είναι εντελώς κλειστές. Η Apple λοιπόν με τα Push Notifications έλυσε έξυπνα ένα σύνθετο πρόβλημα πριν καν ακόμα επιτραπεί το multitasking για τις 3rd party εφαρμογές.
Με το iPhone 4.0, υπάρχει ένα δεύτερο είδος Push Notifications που προστίθεται: Τα Local Notifications. Ο μηχανισμός αυτός επιτρέπει σε εφαρμογές να ορίζουν υπενθυμίσεις πάνω σε ένα πρόγραμμα που το ίδιο το σύστημα διαχειρίζεται για αυτές. Αντί να πρόκειται για πληροφορίες που προωθούνται στη συσκευή από έναν εξωτερικό server, ορίζονται από μια εφαρμογή όταν αυτή λειτουργεί και μετά διαχειρίζονται και παραδίδονται από το σύστημα όταν αυτή η εφαρμογή είναι εντελώς κλειστή.
Ένα παράδειγμα θα μπορούσε να είναι μια εφαρμογή που παρουσιάζει μια υπενθύμιση ενός ζωντανού webcast. Η εφαρμογή δεν χρειάζεται να παραμείνει στο παρασκήνιο ώστε να μετράει αντίστροφα μέχρι την έναρξη του webcast για να ενημερώσει τον χρήστη. Το σύστημα λαμβάνει την υπενθύμιση και την παραδίδει στο χρήση τη χρονική στιγμή που έχει οριστεί για λογαριασμό της εφαρμογής, η οποία εκείνη τη στιγμή είναι εντελώς κλειστή.
Εκτελώντας εργασίες
Ενώ είναι πιο αποτελεσματικό οι εφαρμογές να μπαίνουν σε sleep, υπάρχουν μερικές περιπτώσεις όπου ένα app πρέπει πραγματικά να κάνει κάτι στο παρασκήνιο. Η πιο προφανής εργασία τέτοιου είδους δεν είναι άλλη από το ανέβασμα (upload) ενός αρχείου. Οι χρήστες δεν θέλουν να είναι αναγκασμένοι να παρακολουθούν μια μπάρα προόδου, το οποίο είναι αυτό ακριβώς που συμβαίνει τώρα.
Αυτή τη στιγμή, εάν ένας χρήστης κλείσει μια 3rd party εφαρμογή ενώ αυτή δεν έχει τελειώσει την λειτουργία της, η λειτουργία αυτή θα αποτύχει, διότι το app θα αναγκαστεί από το σύστημα να κλείσει. Οι εφαρμογές της Apple, συμπεριλαμβανομένων των Mail και SMS, μπορούν να συνεχίσουν να στέλνουν μηνύματα, ακόμα και αφού ο χρήστης εγκαταλείψει την εφαρμογή, αλλά αυτό συμβαίνει διότι αυτές δεν αναγκάζονται από το σύστημα να κλείσουν όταν ο χρήστης πλοηγείται μακριά από αυτές. Οι άλλες εφαρμογές είναι.
Για να φιλοξενήσει αυτό το είδος του multitasking στο iPhone 4.0, η Apple προσθέτει το Task Completion API, ένα χαρακτηριστικό που επιτρέπει στους προγραμματιστές να σχεδιάσουν την εφαρμογή τους, ώστε να μπορεί να ζητήσει ένα συγκεκριμένο ποσό χρόνου ώστε να συνεχίσει να εκτελεί μια εργασία πριν η εφαρμογή αυτή παγώσει στο παρασκήνιο. Μόλις ολοκληρωθεί η εργασία που εκτελεί η εφαρμογή ή τελειώσει ο ζητούμενος χρόνος, το σύστημα παγώνει την εφαρμογή στο παρασκήνιο.
Τρεις Ειδικές Εργασίες: VoIP, Background Audio, και Location
Υπάρχουν άλλα τρία σενάρια multitasking που η Apple υποστηρίζει στο iPhone 4,0 που είναι σχετικά με τα είδη των εργασιών που μια εφαρμογή μπορεί να επιθυμεί να εκτελεί στο παρασκήνιο. Αυτός ο μηχανισμός για τη χορήγηση εξαιρέσεων στον κανόνα «Μια εφαρμογή τη φορά» μοντέλο για συγκεκριμένους τύπους εφαρμογών ήταν κατά το AppleInsider αναμενόμενο.
Η πρώτη εξαίρεση/API επιτρέπει σε εφαρμογές να δουλεύουν όπως το υπάρχον Phone.app: να είναι σε θέση να δέχονται κλήσεις και να συνεχίζουν μια κλήση, ενώ χρησιμοποιούνται άλλες εφαρμογές ταυτόχρονα. Μόνο το Phone.app της Apple μπορεί να πραγματοποιήσει κλήσεις, έτσι αυτό το χαρακτηριστικό δεν είναι άλλο από το Voice over IP (VoIP) που είναι σχεδιασμένο να πραγματοποιεί τηλεφωνικές κλήσεις χρησιμοποιώντας το δίκτυο δεδομένων/internet όπως κάνει για παράδειγμα το Skype.
Για να γίνει χρήση αυτού του νέου μηχανισμού για λειτουργία VoIP στο παρασκήνιο, η εκάστοτε εφαρμογή εγγράφεται στο σύστημα ως τέτοια και μπορεί να τερματιστεί ενώ το σύστημα διατηρεί ένα ανοιχτό network socket το οποίο ελέγχει και αναμένει εισερχόμενες κλήσεις VoIP. Όταν υπάρχει εισερχόμενη κλήση, το σύστημα ξυπνάει την εφαρμογή VoIP και της μεταφέρει το δικαίωμα διαχείρισης της δικτυακής σύνδεσης ώστε να εξυπηρετήσει την κλήση.
Ένα δεύτερο σενάριο είναι παρόμοιο με το ενσωματωμένο iPod.app: Ήχος στο παρασκήνιο. Αυτό επιτρέπει σε εφαρμογές όπως το Pandora να ζητήσουν τη δυνατότητα να συνεχίζουν την αναπαραγωγή μουσικής μέσω streaming ακόμα και περάσουν στο παρασκήνιο. Η Apple πλέον προσφέρει τους ίδιους ελέγχους ήχου στο παρασκήνιο με αυτούς που μέχρι σήμερα χρησιμοποιεί το iPod.app.
Ένα τρίτο σενάριο για multitasking περιλαμβάνει τακτικές ενημερώσεις τοποθεσίας. Το νέο χαρακτηριστικό του Background Location εξυπηρετεί δύο ειδών εφαρμογές που χρησιμοποιούν δεδομένα τοποθεσίας: τις εφαρμογές πλοήγησης που παρέχουν και φωνητικές οδηγίες και τις εφαρμογές κοινωνικής δικτύωσης που χρησιμοποιούν την τοποθεσία του χρήστη για να ενημερώσουν τους φίλους του ή να παρουσιάσουν για παράδειγμα διάφορα γεγονότα που μπορεί να συμβαίνουν κοντά του.
Στην πρώτη περίπτωση, η Apple επιτρέπει σε εφαρμογές που παρέχουν οδηγίες πλοήγησης (π.χ. TomTom) να παραμένουν ενεργές στο παρασκήνιο και να έχουν πρόσβαση στο GPS ώστε να προσφέρουν φωνητικές οδηγίες ακόμα και όταν η εφαρμογή είναι στο παρασκήνιο. Αυτό κανονικά θα άδειαζε τη μπαταρία πολύ γρήγορα αλλά οι περισσότεροι άνθρωποι που χρησιμοποιούν τέτοιες εφαρμογές το κάνουν μέσα στο αυτοκίνητό τους και ενώ το iPhone είναι συνδεδεμένο και φορτίζεται.
Από την άλλη πλευρά, οι εφαρμογές κοινωνικής δικτύωσης όπως το Loopt θέλουν και αυτές να γνωρίζουν τη θέση του χρήστη ώστε να είναι χρήσιμες και να λειτουργούν όπως πρέπει αλλά αυτές δε χρησιμοποιούνται πάντα μέσα σε αυτοκίνητο ώστε η συσκευή φορτίζεται. Σε περίπτωση που χρησιμοποιούσαν το GPS, θα άδειαζαν τη μπαταρία του iPhone αρκετά γρήγορα, μόνο για να προσφέρουν μια υπηρεσία περιορισμένης αξίας και χρησιμότητας. Προκειμένου να υποστηριχθούν αυτές οι μορφές υπηρεσιών αποτελεσματικά, το Background Location τους προμηθεύει με τα δεδομένα που η ίδια η συσκευή λαμβάνει συχνά όταν ο χρήστης μετακινείται μεταξύ διαφόρων κεραιών κινητής τηλεφωνίας.
Αυτή η ενημέρωση συμβαίνει όταν ο χρήστης κινείται περίπου μεταξύ 500 και 1000 μέτρων. Όταν συμβεί η αλλαγή τοποθεσίας, το σύστημα «ξυπνάει» την εφαρμογή, ενημερώνει την τοποθεσία, της δίνει χρόνο για να επεξεργαστεί αυτή την αλλαγή και έπειτα την τερματίζει/παγώνει ξανά. Αυτός ο τρόπος παρακάμπτει το άδειασμα της μπαταρίας από το GPS ενώ ταυτόχρονα επιτρέπει σε αυτού του είδους τις εφαρμογές να δουλεύουν χωρίς να είναι ταυτόχρονα στο προσκήνιο όπως συμβαίνει μέχρι τώρα.
Λόγοι για διαφορετικό Multitasking
Εκτός από την αυξημένη αποτελεσματικότητα, η προσέγγιση της Apple με αυτό το ελεγχόμενο multitasking επιτρέπει την απλουστευμένη συμβατότητα μεταξύ συσκευών όπως το iPhone 3G, το οποίο δεν θα υποστηρίξει multitasking, με πιο πρόσφατες συσκευές που θα το υποστηρίζουν. Εφαρμογές που εκμεταλλεύονται το νέο API, μπορούν να ζητούν τη δυνατότητα να εκτελέσουν εργασίες στο παρασκήνιο ούτως ώστε αν το hardware δεν τις υποστηρίζει, το ίδιο το λειτουργικό σύστημα να επιστρέφει αρνητική απάντηση στην εφαρμογή.
Η προσέγγιση της Google με τις υπηρεσίες/services απαιτεί ένα νέο μοντέλο client/server. Αν η Apple είχε αντιγράψει αυτό το σύστημα, οι developers θα έπρεπε να δημιουργήσουν μια νέα κατηγορία εφαρμογών για παλαιότερες συσκευές και μια άλλη άλλη για νεότερες. Αυτό για την Apple που διαθέτει στο AppStore έναν τεράστιο αριθμό εφαρμογών θα ήταν καταστροφικό.
Επιπλέον, πολλά από αυτά που οι προγραμματιστές κάνουν με τα Services στο Android, συμβαίνουν ήδη στο iPhone OS με τα Push Notifications. Έτσι, αν η Apple δημιουργούσε μια αρχιτεκτονική για το iPhone OS 4.0 που θα έμοιαζε με τα Android Services θα σήμαινε ότι οι developers Android εφαρμογών που θέλουν να μεταφέρουν τις εφαρμογές τους και στο iPhone θα έπρεπε να το κάνουν με τέτοιο τρόπο που θα χρησιμοποιούσαν αυτά τα Services και όχι τα πιο αποτελεσματικά Push Notifications, δημιουργώντας έτσι το πρόβλημα που υπάρχει ήδη στο Blackberry όπου τα χαρακτηριστικά του Push αγνοούνται από τις 3rd party εφαρμογές και παραμένουν αχρησιμοποίητα.
Ενοποιημένα Εργαλεία Ανάπτυξης Εφαρμογών: Clang, LLVM και Xcode
Αυτό, επίσης, οδηγεί στο συμπέρασμα ότι ο σχεδιασμός της Apple για την ενσωμάτωση multitasking δυνατοτήτων στο iPhone OS 4.0 έχει γίνει με τέτοιο τρόπο που αποσκοπεί στη βελτίωση της ίδιας της πλατφόρμας και όχι στη δημιουργία συμβατότητας με άλλες πλατφόρμες που λειτουργούν διαφορετικά.
Δεν θα πρέπει λοιπόν να αποτελεί έκπληξη ότι η Apple δεν ενδιαφέρεται καθόλου να διευκολύνει τη μεταφορά εφαρμογών από άλλες πλατφόρμες στο iPhone OS. Αν το έκανε, θα σήμαινε τον παραμερισμό των πλεονεκτημάτων του iPhone OS και την ενθάρρυνση των developers να στοχεύουν στον ελάχιστο κοινό παρονομαστή ώστε οι εφαρμογές τους να δουλεύουν σε όλες τις πλατφόρμες αντί του να τους ενθαρρύνει να εκμεταλλευθούν στο έπακρο τα μοναδικά χαρακτηριστικά του iPhone OS.
Πρόκειται για τον ίδιο λόγο με το γιατί η Apple δεν έχει κανένα σκοπό να υποστηρίξει Flash ή Java ως meta-platform για το iPhone, αλλά και γιατί η εταιρεία δεν θέλει να υποστηρίξει προσπάθειες τρίτων για τη δημιουργία εργαλείων ανάπτυξης εφαρμογών για iPhone. Η στρατηγική που η Adobe ήθελε να ακολουθήσει με το Flash Professional δεν θα προσέφερε στους χρήστες τη δυνατότητα υποστήριξης των Multitasking χαρακτηριστικών του iPhone OS 4.0. Επίσης η Adobe δεν θα είχε τη δυνατότητα να προσθέσει γρήγορα αυτές τις δυνατότητες (όσο γρήγορα θα ήθελε η Apple) αλλά ούτε και θα ήταν και προς το ίδιο συμφέρον της Adobe να το κάνει (σ.μ. έχοντας ως στόχο τη δημιουργία ενός cross platform development tool για εφαρμογές, διάφορα χαρακτηριστικά που υπάρχουν μόνο στο iPhone OS δεν θα υποστηρίζονταν από την Adobe γιατί απλά δεν θα μπορούσαν έτσι να δημιουργούνται universal εφαρμογές)
Η νέα απαγόρευση της Apple στο iPhone 4.0 για ανάπτυξη εφαρμογών σε άλλες γλώσσες πλην της C, C + + και της Objective-C σε μεγάλο βαθμό θεωρείται ως μια επίθεση σε εξωτερικά εργαλεία ανάπτυξης εφαρμογών όπως το Flash CS5 της Adobe. Ωστόσο, σχολιαστές, συμπεριλαμβανομένου του Rainer Brockerhoff έχουν επισημάνει έκτοτε ότι η Apple εστιάζει στη C ακολουθώντας μια στρατηγική που αποβλέπει στη βελτίωση του iPhone OS development χρησιμοποιώντας το Clang.
Το Clang (συντομογραφία του «C Language») είναι ένα open source project που δημιουργήθηκε από την Apple για να αποτελέσει έναν νέο front-end compiler για κώδικα σε C, C++ και Objective-C. To Clang συνδέεται με το LLVM, Low Level Virtual Machine, το οποίο χρησιμεύει ως back-end compiler για το Xcode της Apple (εργαλείο ανάπτυξης εφαρμογών για Mac OS X και iPhone OS).
Ο συνδυασμός του Clang με το LLVM αντικαθιστά αποτελεσματικά το GCC (GNU Compiler Collection, ο GPL-licenced compiler για Unix λειτουργικά συστήματα). Επειδή η αλυσίδα των εργαλείων της Apple για το compile αδειοδοτείται από το πιο ανεκτικό license του BSD, η Apple μπορεί να τα ενοποιήσει πιο εύκολα με το περιβάλλον ανάπτυξης του Xcode.
Επιπλέον, το Clang και το LLVM επιτρέπουν στην Apple να βελτιστοποιήσει τα διάφορα βήματα κατά τη διάρκεια της διαδικασίας του compile, δημιουργώντας έτσι εφαρμογές για Mac και iPhone που θα είναι πιο αποτελεσματικές, ταχύτερες, ελαφρότερες και ευκολότερες στο debug, εξαιτίας μιας πληθώρας βελιτώσεων και ενισχύσεων που τα ευέλικτα νέα εργαλεία της προσφέρουν σε σχέση με το GCC.
Έχοντας επενδύσει τόσο πολύ στο Clang και το LLVM, δεν πρέπει να αποτελεί έκπληξη ότι η Apple προσπαθεί να πιέσει τους developers να χρησιμοποιούν τα δικά της εργαλεία ανάπτυξης εφαρμογών αντί να προσπαθούν να βρουν τους ελάχιστους κοινούς παρονομαστές με άλλες πλατφόρμες και να δημιουργούν εφαρμογές για το iPhone που δεν εκμεταλλεύονται στο έπακρο όλα τα χαρακτηριστικά του iPhone OS συμπεριλαμβανομένων και των νέων δυνατοτήτων για multitasking.
Σχετικά Άρθρα:
