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

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

Διάλ ε ξη 10 Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη.

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


Παρουσίαση με θέμα: "Διάλ ε ξη 10 Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη."— Μεταγράφημα παρουσίασης:

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

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

3 Android και Threads  Εκκίνηση εφαρμογής  εκκίνηση νήματος γνωστό ως main ή UI thread  Κανόνες που διέπουν το Android single thread model 1.To U Ι thread δεν πρέπει να μπλοκάρεται 2.Αποφυγή πρόσβασης στο 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 3

4 Android και Threads  Μέθοδοι αποφυγής των προβλημάτων αυτών Χρήση πολλαπλών 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 4

5 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015  Android και Threads  AsyncTasks  Handlers  SQLite  Android και Web Services  Android Design Patterns 5 Διάλεξη 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 6

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

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

9 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 Διάλεξη 10 9 Τοποθετούν Runnable objects ώστε να κληθούν από την ουρά μηνυμάτων όταν ληφθούν Τοποθετούν Message objects που περιέχουν δεδομένα προς επεξεργασία Υλοποιείται από τις υποκλάσεις του Handler και καλείται για να επεξεργαστεί τα δεδομένα που στέλνουν οι sendMessage

10 Service vs Thread vs IntentService vs AsyncTask ServiceThreadIntentServiceAsyncTask 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 TriggerCall to method onStartService()Thread start() methodIntentCall to method execute() Triggered From (thread)Any threadAny Thread Main Thread (Intent is received on main thread and then worker thread is spawed) Main Thread Runs On (thread)Main ThreadIts own threadSeparate 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 10

11 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015  Android και Threads  AsyncTasks  Handlers  SQLite  Android και Web Services  Android Design Patterns 11 Διάλεξη 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 μπορούμε να δημιουργήσουμε, να ανοίξουμε μια βάση, να δημιουργήσουμε πίνακες στη βάση, να εισάγουμε και να εξάγουμε δεδομένα προς και από τους πίνακες. 12 Διάλεξη 10

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

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

15 Android and Web Services  Μοντέλο Επικοινωνίας Αίτηση για WS με τις αντίστοιχες παραμέτρους της μεθόδου, Λήψη απάντησης από τον εξυπηρετητή, Ανάκτηση δεδομένων από την απάντηση.  Συνήθεις τύποι Web Services SOAP  Το Android δεν περιλαμβάνει SOAP Client. Δύο λύσεις: Χρήση Third Party Libraries  KSOAP2 project  Ελαφριά και αποδοτική βιβλιοθήκη για SOAP client σε Android συσκευές  Στηρίζεται σε Java 1.3  Δουλεύει και σε άλλες πλατφόρμες που στηρίζονται σε Java Κλήση SOAP Web Service με native Αndroid APIs. Δημιουργία της SOAP αίτησης εξολοκλήρου από τον χρήστη και διαχείριση της απάντησης. Απαραίτητη η χρήση  HttpClient κλάσης  XML parser REST  Πιο απλή διαδικασία Αίτηση υπηρεσίας καλώντας το URL με τις παραμέτρους Ασφαλής σύνδεση με Web Service πάνω από ένα Secure Sockets Layer πρωτόκολλο  Η HttpClient δεν υποστηρίζει SSL συνδέσεις  Σύνδεση μέσω την javax.net.ssl.HttpsURLConnection για ασφαλή σύνδεση  Στα πλαίσια της εργασίας θα χρησιμοποιηθεί η KSOAP2 βιβλιοθήκη για επικοινωνία με Web Services από Android συσκευές 15 Διάλεξη 10

16 Παράδειγμα χρήση ksoap2  Βήματα υλοποίησης Δημιουργία Web Service Έλεγχος δημιουργίας wsdl αρχείου Δημιουργία Android Web Service Client Τροποποίηση των permissions στο AndroidManifest.xml 16 AndroidManifest.xml Διάλεξη 10

17 Παράδειγμα χρήσης ksoap2 17 Web Service Web Service Client WSDL file Διάλεξη 10

18 Παράδειγμα χρήσης ksoap2  Από την έκδοση Android 3.0 και πάνω δεν επιτρέπεται η σύνδεση στο διαδίκτυο από το κυρίως νήμα  εκκίνηση νέου νήματος 18 Δημιουργία αίτησης SOAP με βάση το namespace και το method_name Δημιουργία και αποστολή SOAP envelope Λήψη SOAP απάντησης Προβολή απάντησης στην οθόνη Διάλεξη 10

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

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

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

22 Αναφορές  Threads http://developer.android.com/guide/components/processes-and- threads.html http://developer.android.com/guide/components/processes-and- threads.html http://developer.android.com/reference/java/lang/Thread.html  AsyncTasks http://developer.android.com/reference/android/os/AsyncTask.html http://code.google.com/p/shelves/  Handlers http://developer.android.com/reference/android/os/Handler.html  Other Service vs Thread vs IntentService vs AsyncTask  http://crazyaboutandroid.blogspot.gr/2011/12/difference-between- android.html http://crazyaboutandroid.blogspot.gr/2011/12/difference-between- android.html Common Tasks in Android  http://developer.android.com/guide/faq/commontasks.html#threading http://developer.android.com/guide/faq/commontasks.html#threading Keeping the App responsive  http://developer.android.com/training/articles/perf-anr.html http://developer.android.com/training/articles/perf-anr.html 22 Διάλεξη 10


Κατέβασμα ppt "Διάλ ε ξη 10 Android και Threads AsyncTasks Handlers SQLite Android και Web Services Android Design Patterns Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη."

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


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