Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Τμήμα Πληροφορικής και Τηλεπικοινωνιών"— Μεταγράφημα παρουσίασης:

1 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Διάλεξη 10 Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 1

2 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο

3 Android και Threads Εκκίνηση εφαρμογής  εκκίνηση νήματος γνωστό ως main ή UI thread Κανόνες που διέπουν το Android single thread model To UΙ thread δεν πρέπει να μπλοκάρεται Αποφυγή πρόσβασης στο Android UI toolkit από άλλα thread εκτός του UI thread UI thread Υπεύθυνο για την αποστολή γεγονότων συμπεριλαμβανομένων και των drawing events Παράδειγμα: Click ένα κουμπί  το UI thread αποστέλλει το γεγονός αυτό στο αντίστοιχο widget  το οποίο θέτει τη press state του συγκεκριμένου κουμπιού σε true και προσθέτει στην ουρά γεγονότων μία αίτηση  Τo UI thread αφαιρεί αυτή την αίτηση και ενημερώνει το widget να κάνει redraw  το widget έκτελεί το redraw και η αλλαγή φαίνεται στο χρήστη. Αποφυγή εκτέλεσης χρονοβόρων διαδικασιών σε αυτό το thread Θα μπλοκάρει όλη η διεπαφή, Ο χρήστης νομίζει ότι η εφαρμογή κολλάει ή έχει κρεμάσει Αν το νήμα μπλοκάρει για μεγάλο χρονικό διάστημα, ο χρήστης ενημερώνεται από το λειτουργικό σύστημα ότι η εφαρμογή δεν ανταποκρίνεται. Πχ: Μη ανταπόκριση σε ένα input event (π.χ. πάτημα ενός κουμπιού) εντός 5 δευτερολέπτων Μη ολοκλήρωση των λειτουργιών ενός BroadcastReceiver εντός 10 δευτερολέπτων Διάλεξη 10

4 Android και Threads Μέθοδοι αποφυγής των προβλημάτων αυτών
Παραβίαση του single thread model το οποίο ορίζει ότι το Android UI toolkit το χειρίζεται μόνο το UI thread Μπορούν να χρησιμοποιηθούν για άλλες ενέργειες που δεν αλληλεπιδρούν με το UI (worker threads) Τρόποι πρόσβασης στο UI από άλλα threads Περίπλοκες διαδικασίες που κάνουν περίπλοκο τον κώδικα Παραδείγματα Activity.runOnUiThread(Runnable r) View.post(Runnable) View.postDelayed(Runnable) Handler Χρήση των AsyncTasks Αναλαμβάνει να διαχειριστεί τα threads για τον χρήστη Διάλεξη 10

5 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο

6 AsyncTask Δημιουργία κλάσης που κάνει extend την AsyncTask κλάση
Το instance του αντικειμένου πρέπει να δημιουργηθεί στο Ui thread Το ΑsyncTask εκτελείται μία φορά ΜΟΝΟ Χρήσιμες μέθοδοι για override doInBackground()  εκτελείται αυτόματα σε νέο thread onPreExecute(), onPostExecute() and onProgressUpdate() γίνονται invoke από το Ui thread, επιτρέποντας έτστι τη πρόσβαση στο Android UI Toolkit Αυτό που επιστρέφει η doInBackground() αποστέλλεται στην onPostExecute() Καλώντας την publishProgress() οποιαδήποτε στιγμή στην doInBackground() εκτελείται η onProgressUpdate() στο UI thread Το κάθε task μπορεί να ακυρωθεί οποιαδήποτε στιγμή από οποιοδήποτε Thread Παράδειγμα: Διάλεξη 10

7 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο

8 Handler class Επιτρέπουν την αποστολή και διαχείριση Μessage και Runnable αντικειμένων που σχετίζονται με την ουρά μηνυμάτων ενός νήματος Κάθε Handler instance συσχετίζεται με ένα νήμα (και την αντίστοιχη ουρά μηνυμάτων). Η συσχέτιση αυτή γίνεται κατά τη δημιουργία του Handler instance, οπότε αυτό είναι πλέον «συνδεδεμένο» με το νήμα που το δημιούργησε Σε αυτό το νήμα θα αποστέλλει Message και Runnable αντικείμενα. Τα μηνύματα τοποθετούνται στην ουρά μηνυμάτων και εκτελούνται όταν βγουν από αυτή. Διάλεξη 10

9 Τοποθετούν Message objects που περιέχουν δεδομένα προς επεξεργασία
Handler class Τα Handlers είναι χρήσιμα όταν πρέπει: Να χρονοπρογραμματίσουμε την εκτέλεση Messages ή Runnables κάποια στιγμή στο μέλλον Να προσθέσουμε μία ενέργεια που θα εκτελεστεί σε άλλο thread Βασικές μέθοδοι για scheduling Messages ή Runnables post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), sendMessageDelayed(Message, long) handleMessage(Message) Ένας Handler μπορεί να αναλάβει την επικοινωνία ανάμεσα στο mainThread που είναι υπεύθυνο για τη διαχείριση των top-level αντικειμένων (activities, broadcast receivers κλπ.) με τα υπόλοιπα threads Τοποθετούν Runnable objects ώστε να κληθούν από την ουρά μηνυμάτων όταν ληφθούν Τοποθετούν Message objects που περιέχουν δεδομένα προς επεξεργασία Υλοποιείται από τις υποκλάσεις του Handler και καλείται για να επεξεργαστεί τα δεδομένα που στέλνουν οι sendMessage Διάλεξη 10

10 Service vs Thread vs IntentService vs AsyncTask
When to use ? Task with no UI, but shouldn't be too long. Use threads within service for long tasks. - Long task in general. - For tasks in parallel use Multiple threads (traditional mechanisms) Long task usually with no communication to main thread. - If communication is required, can use main thread handler or broadcast intents - When callbacks are needed (Intent triggered tasks).  - Small task having to communicate with main thread. - For tasks in parallel use multiple instances OR Executor  Trigger Call to method onStartService() Thread start() method Intent Call to method execute() Triggered From (thread) Any thread Any Thread Main Thread (Intent is received on main thread and then worker thread is spawed) Main Thread Runs On (thread) Its own thread Separate worker thread Worker thread. However, Main thread methods may be invoked in between to publish progress. Limitations / Drawbacks May block main thread - Manual thread management - Code may become difficult to read - Cannot run tasks in parallel. - Multiple intents are queued on the same worker thread. - one instance can only be executed once (hence cannot run in a loop)  - Must be created and executed from the Main thread Διάλεξη 7

11 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο

12 SQLite Database Open Source Database ενσωματωμένη στην πλατφόρμα Android Υποστηρίζει λειτουργικότητα σχεσιακών βάσεων δεδομένων Συντακτικό SQL Transactions Prepared Statements Απαιτεί ελάχιστη μνήμη (~250 Kbytes) Υποστηρίζει του τύπους TEXT (ανάλογο του String της Java) INTEGER (ανάλογο του long της Java) REAL (ανάλογο του double στη Java) Όλοι οι άλλοι τύποι πρέπει να μετατραπούν σε κάποιον από τους παραπάνω για να αποθηκευθούν στην ΒΔ Κάθε εφαρμογή μπορεί να χρησιμοποιεί τη δική της Βάση Δεδομένων Path: /DATA/data/APP_NAME/databases/FILENAME Με χρήση της Java μπορούμε να δημιουργήσουμε, να ανοίξουμε μια βάση, να δημιουργήσουμε πίνακες στη βάση, να εισάγουμε και να εξάγουμε δεδομένα προς και από τους πίνακες. Διάλεξη 10

13 SQLite - Κλάση SQLiteDatabase
Η κλάση SQLiteDatabase αποτελεί τη βασική κλάση για την αλληλεπίδραση με τη βάση SQLite. Παρέχει μεθόδους για άνοιγμα και κλείσιμο της βάσης Παρέχει μεθόδους για εισαγωγή, διαγραφή και ενημέρωση δεδομένων στη βάση Μέθοδοι insert(), update() και delete() Παρέχει τη μέθοδο execSQL() για την εκτέλεση SQL statements Το αντικείμενο ContentValues επιτρέπει τον καθορισμό ζευγαριών (κλειδί, τιμή) και επιτρέπει την εισαγωγή και ανανέωση δεδομένων στη βάση. Το κλειδί (key) αντιπροσωπεύει το όνομα της στήλης του πίνακα, ενώ η τιμή (value) το περιεχόμενο του πίνακα στη συγκεκριμένη στήλη για την τρέχουσα εγγραφή Επερωτήσεις μπορούν να δημιουργηθούν με χρήση των μεθόδων rawQuery() και query() ή με χρήση της κλάσης SQLiteQueryBuilder. Διάλεξη 10

14 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο

15 Android and Web Services
Διάλεξη 10

16 Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Διάλεξη 10 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο

17 To layout γίνεται inflate τη 1η φορά μόνο
ViewHolder Το View Holder επιτρέπει τη πρόσβαση σε κάθε list item ενός List Activity χωρίς την χρήση της findViewById() στην getView() του ArrayAdapter η οποία καλείται κατά το scrolling Πως δουλεύει: To layout γίνεται inflate τη 1η φορά μόνο Σε ΚΑΘΕ κλήση (πχ όταν γίνεται scrolldown) για ΌΛΑ τα list items ψάχνει να βρει το id, καταναλώνοντας πόρους από τη μνήμη Διάλεξη 7

18 Half Synchronous- Half Asynchronous
Καθορίζει τη δομή των νημάτων σε μία πολυνηματική εφαρμογή Η διαχείριση των νημάτων διασπάται σε 2 διαχειριστικά κομμάτια Το ασύγχρονο κομμάτι είναι η επικοινωνία του main thread με ένα άλλο thread (worker thread) To σύγχρονο κομμάτι είναι η ανάθεση tasks σε άλλα νήματα (τα οποία λαμβάνονται από κάποιο pool) από το worker thread Ουσιαστικά τα AsyncTasks υλοποιούν αυτό το design pattern API versioning Αρχικά τα AsyncTasks εκτελούνταν σειριακά σε ένα μόνο background thread. DONUT SDK: Αντί για ένα background thread υπάρχει pool από νήματα επιτρέποντας σε πολλαπλά tasks να εκτελούνται παράλληλα HONEYCOMB SDK: άλλαξε πάλι σε ένα thread για αποφυγή λαθών σε εφαρμογές λόγω παράλληλης εκτέλεσης tasks. Η λύση για παράλληλη εκτέλεση των tasks είναι η χρήση του executeOnExecutor(Executor, Params...) με το flag THREAD_POOL_EXECUTOR Συνίσταται να αποφεύγεται και αν κάτι τέτοιο δεν είναι εφικτό, θα πρέπει να γίνεται με μεγάλη προσοχή. Διάλεξη 7

19 Αναφορές Threads AsyncTasks Handlers Other
AsyncTasks Handlers Other Service vs Thread vs IntentService vs AsyncTask Common Tasks in Android Keeping the App responsive Διάλεξη 10


Κατέβασμα ppt "Τμήμα Πληροφορικής και Τηλεπικοινωνιών"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google