AsyncTask คืออะไร? by

30
Jun
0

AsyncTask นั้นเป็น abstract class ที่ทาง Android นั้นจัดเตรียมมาให้เราเพื่อทำการประมวลผล หรือทำงานเป็น background โดยไม่ต้องไปยุ่งกับตัว UI หลัก อย่างเช่น กรณีต้องการดึง content จากเว็บไซต์เว็บหนึ่ง เพื่อมาแสดงบนแอพพลิเคชันของเรา เราก็จะใช้ AsyncTask ช่วยในการคำนวณ ประมวลผล โดยเมื่อ AsyncTask ทำงานอยู่ มันจะไม่กระทบกับหน้าจอ UI ของเรา

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

การเรียกใช้งานก็แสนง้ายครับ new DownloadFilesTask().execute(url1, url2, url3);

The 4 steps

หลังจากเราทำการ executed แล้ว task จะทำงาน 4 steps ตามนี้ครับ

1. onPreExecute() <<<< อันนี้เอาไว้ invoked UI ก่อนที่จะเริ่ม executed ส่วนมากก็เอาไว้ setup ui ต่าง ex progressbar

2.doInBackground(Params…) <<<<< หลังจากที่  onPreExecute() ทำงานเสร็จก็จะมาทำงานตรงนี้และครับ ตรงนี้เอาไว้ติดต่อกับ internet ครับ จะทำจนกว่าจะเสร้จถ้าเราทำการ load file ครับ

3.onProgressUpdate(Progress…) <<<< หากมีการเรียกใช้งานก็จะเอาไว้ทำการ update ค่าต่างๆครับ ว่า load ได้ขนาดไหนแล้ว กี่ byte หรือกี่ % แล้ว อันนี้ต้องเขียน code ไว้ตรงนี้นะครับ

4.onPostExecute(Result) <<<< หลังจาก doInBackground(Params…) ทำงานเสร็จ onPostExecute(Result) ก็จะถูกเรียกครับ คือหลังจาก เรา load file เสร็จแล้วจะให้ทำอะไรต่อนั้นและครับ

 

 

ถามว่าจำเป็นยังไงก็บอกได้เลยครับว่าจำเป็นมาก เพราะถ้าเราทำงานติดต่อผ่าน internet แล้วละก็ไม่ทำงานผ่าน

thread or asynctask แล้วละก็ GC ของ android จะมาเก้บ activity ของเราครับ แต่ถ้าผมจำไม่ผิดตั้งแต่มีการ up api 4.0 เค้าบังคับว่าต้องใช้งานแล้วครับ วันนี้พอก่อนแล้วกันครับ วันหลังมาต่อเรื่องอื่นกัน

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post