Προς το περιεχόμενο

ποια ειναι η εννοια της async task


shirl

Προτεινόμενες αναρτήσεις

παιδια εχω μια γενικη εικονα αλλα επειδη θα παραδωσω την πτυχιακη μου σε λιγο καιρο θα ηθελα καποιος να μου εξηγησει ακριβως την λειτοργια της.το διαβασα στα αγγλικα αλλα παρ'ολο που τα αγγλικα μου ειναι καλα δε μπορω να πω με ακριβεια τι ειναι.

ευχαριστω εκ των προτερων!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε γενικές γραμμές πρόκειται για ένα thread εντός ενός class το οποίο σου επιτρέπει να επικοινωνείς με το UI thread (το κεντρικό thread δηλαδή) της εφαρμογής σου με απλό και σίγουρο τρόπο, δίχως δηλαδή να σε απασχολούν ζητήματα συγχρονισμού κλπ καθώς όλα αυτά τα αναλαμβάνει για εσένα η AsyncTask class παρέχοντας σου μια σειρά από properties, συναρτήσεις και διαδικασίες πάνω στις οποίες μπορείς να χτίσεις (να κάνεις δηλαδή extend) την δική σου class (thread).

 

Οι ρουτίνες που προσφέρει η AsyncTask είναι αρκετές αλλά 4 θεωρούνται βασικές. Η πρώτη είναι η onPreExecute η οποία εκτελείται εντός του UI Thread σου, συνήθως εδώ δημιουργούμε ένα ProgressDialog που ενημερώνει τον χρήστη ότι η εφαρμογή μας ξεκινά μια χρονοβόρα διαδικασία κλπ..

 

Η δεύτερη είναι η doInBackground, εδώ τοποθετούμε τον κώδικα που θα εκτελεσθεί στο Thread της AsyncTask class μας. Η συνάρτηση είναι τύπου μεταβλητού αριθμού παραμέτρων, το είδος της επιστρεφόμενης τιμής καθορίζεται από εμάς κατά την δήλωση του AsyncTask μας (βλ. documentation της πλατφόρμας). Φυσικά εντός της αποφεύγουμε οποιαδήποτε ρουτίνα χρειάζεται Looper (δηλαδή UI Thread κλπ) διαφορετικά θα έχουμε ένα μεγαλοπρεπές crash!

 

Η τρίτη είναι η onPostExecute, όπως και η onPreExecute εκτελείται εντός του UI Thread σου, συνήθως εδώ διαγράφουμε το ProgressDialog που δημιουργήσαμε κατά την onPreExecute, επίσης εδώ μπορούμε να ενημερώσουμε το UI Thread μας για τα αποτελέσματα της AsyncTask μας (η onPostExecute δέχεται ως όρισμα της το ..αποτέλεσμα της doInBackground) κλπ. (το πώς θα το κάνουμε εξαρτάται – πχ. με κάποιο custom Interface κλπ).

 

Η τέταρτη είναι η onProgressUpdate, και αυτή όπως η προηγούμενη διαδικασία τρέχει εντός του UI Thread μας και μας επιτρέπει να ενημερώνουμε το υπόλοιπο πρόγραμμα (πχ. το ProgressDialog που τυχόν δημιουργήσαμε στην onPreExecute κλπ) για την εξέλιξη των εντολών που εκτελούνται εντός της doInBackground κάθε φορά που η τελευταία εκτελεί την συνάρτηση publishProgress (βλ. documentation της πλατφόρμας) -το πότε και αν θα εκτελέσουμε την συνάρτηση publishProgress εντός της doInBackground είναι δικό μας θέμα.

 

Τέλος υπάρχει και η onCancelled που διαχειρίζεται περιπτώσεις ακύρωσης του AsyncTask από τον χρήστη κλπ.

 

Ένα μειονέκτημα του AsyncTask το οποίο πρέπει να ληφθεί υπόψη κατά την χρήση του είναι η αυτόματη ακύρωση του κατά την εναλλαγή προσανατολισμού της οθόνης εφόσον ο χρήστης αφήνει το Android να διαχειρίζεται αυτόματα την αλλαγή του configuration της οθόνης (:-/).

 

Για περισσότερες πληροφορίες ρίξε μια ματιά στο documentation της πλατφόρμας με ψυχραιμία και η άκρη θα βρεθεί - αν τώρα όλα αυτά φαίνονται παράξενα τότε θα πρέπει να αφιερώσεις χρόνο στην μελέτη των βασικών αρχών προγραμματισμού του Android.

 

Υ.Γ.

Σε άλλες γλώσσες / περιβάλλοντα η AsyncTask θα μπορούσε να λεχθεί ως "Background Worker" (πχ. σε C#) - αν αυτό σε βοηθάει τηρουμένων των διαφορών που υπάρχουν) να πιάσεις το νόημα..

 

Καλή συνέχεια!

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ευχαριστω πολυ Directx!  

 

αυτο που ειχα καταλαβει ειναι οτι λειτουργει στο background του UI ,δηλαδη λειτουργει παραλληλα ετσι ωστε αν θελουμε να παρουμε καποιες πληροφοριες μεσω διαδικτυου αυτο να γινει παραλληλα ενω "τρεχει" το UI ετσι ωστε να μην γινει αισθητη η καθυστερηση στον χρηστη. ισχυει αυτο?? 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ευχαριστω πολυ Directx!  

 

αυτο που ειχα καταλαβει ειναι οτι λειτουργει στο background του UI ,δηλαδη λειτουργει παραλληλα ετσι ωστε αν θελουμε να παρουμε καποιες πληροφοριες μεσω διαδικτυου αυτο να γινει παραλληλα ενω "τρεχει" το UI ετσι ωστε να μην γινει αισθητη η καθυστερηση στον χρηστη. ισχυει αυτο??

Ισχύει - το AsyncTask τρέχει σε ξεχωριστό thread από εκείνο του UI πλην των onPreExecute , onPostExecute και onProgressUpdate που τρέχουν εντός του UI Thread (ώστε να μπορούν να έχουν επαφή μαζί του).
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 5 μήνες μετά...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...