ทำไมอย่างไรและพารามิเตอร์ที่ส่งผ่านไปยัง Asynctask <> ดูรายละเอียดที่นี่ ฉันคิดว่ามันเป็นคำอธิบายที่ดีที่สุด
เอกสาร Android ของ Google กล่าวว่า:
งานอะซิงโครนัสถูกกำหนดโดยประเภททั่วไป 3 ประเภทเรียกว่า Params, Progress and Result และ 4 ขั้นตอนเรียกว่า onPreExecute, doInBackground, onProgressUpdate และ onPostExecute
ประเภททั่วไปของ AsyncTask:
สามประเภทที่ใช้โดยงานอะซิงโครนัสมีดังต่อไปนี้:
Params คือชนิดของพารามิเตอร์ที่ส่งไปยังงานเมื่อดำเนินการ ความคืบหน้าประเภทของหน่วยความคืบหน้าที่เผยแพร่ระหว่างการคำนวณพื้นหลัง ผลลัพธ์ประเภทของผลลัพธ์ของการคำนวณพื้นหลัง ไม่ใช่ทุกประเภทที่ใช้กับงานอะซิงโครนัสเสมอไป หากต้องการทำเครื่องหมายประเภทว่าไม่ได้ใช้เพียงแค่ใช้ประเภท Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
คุณสามารถอ้างอิงเพิ่มเติมได้ที่: http://developer.android.com/reference/android/os/AsyncTask.html
หรือคุณสามารถล้างบทบาทของ AsyncTask ได้โดยอ้างถึงบล็อกของ Sankar-Ganesh
โครงสร้างของคลาส AsyncTask ทั่วไปมีลักษณะดังนี้:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
วิธีนี้จะดำเนินการก่อนเริ่มเธรดใหม่ ไม่มีค่าอินพุต / เอาต์พุตดังนั้นเพียงแค่เริ่มต้นตัวแปรหรืออะไรก็ตามที่คุณคิดว่าคุณต้องทำ
protected Z doInBackground(X...x){
}
วิธีการที่สำคัญที่สุดในคลาส AsyncTask คุณต้องวางทุกสิ่งที่คุณต้องการทำในพื้นหลังไว้ที่นี่ในเธรดที่แตกต่างจากหัวข้อหลัก ที่นี่เรามีอาร์เรย์ของวัตถุจากประเภท "X" เป็นค่าอินพุต (คุณเห็นในส่วนหัวหรือไม่เรามี "... ขยาย AsyncTask" นี่คือ TYPES ของพารามิเตอร์อินพุต) และส่งคืนวัตถุจากประเภท “Z”
โมฆะป้องกัน onProgressUpdate (Y y) {
} วิธีนี้เรียกว่าโดยใช้วิธีการ PublishProgress (y) และโดยปกติจะใช้เมื่อคุณต้องการแสดงความคืบหน้าหรือข้อมูลใด ๆ ในหน้าจอหลักเช่นแถบความคืบหน้าแสดงความคืบหน้าของการดำเนินการที่คุณกำลังทำอยู่เบื้องหลัง
โมฆะป้องกัน onPostExecute (Z z) {
} วิธีนี้เรียกว่าหลังจากการดำเนินการในพื้นหลังเสร็จสิ้น ในฐานะพารามิเตอร์อินพุตคุณจะได้รับพารามิเตอร์เอาต์พุตของเมธอด doInBackground
แล้วประเภท X, Y และ Z ล่ะ?
ดังที่คุณสามารถสรุปได้จากโครงสร้างข้างต้น:
X – The type of the input variables value you want to set to the background process. This can be an array of objects.
Y – The type of the objects you are going to enter in the onProgressUpdate method.
Z – The type of the result from the operations you have done in the background process.
เราเรียกงานนี้จากชั้นเรียนนอกได้อย่างไร? ด้วยสองบรรทัดต่อไปนี้:
MyTask myTask = new MyTask();
myTask.execute(x);
โดยที่ x คือพารามิเตอร์อินพุตของประเภท X
เมื่อเราดำเนินงานแล้วเราสามารถค้นหาสถานะได้จาก“ ภายนอก” โดยใช้เมธอด“ getStatus ()”
myTask.getStatus (); และเราสามารถรับสถานะต่อไปนี้:
RUNNING - ระบุว่างานกำลังทำงานอยู่
กำลังรอ - แสดงว่างานยังไม่ได้ดำเนินการ
FINISHED - ระบุว่า onPostExecute (Z) เสร็จสิ้นแล้ว
คำแนะนำเกี่ยวกับการใช้ AsyncTask
อย่าเรียกใช้เมธอด onPreExecute, doInBackground และ onPostExecute ด้วยตนเอง ระบบจะทำโดยอัตโนมัติ
คุณไม่สามารถเรียก AsyncTask ภายใน AsyncTask หรือ Thread อื่นได้ การเรียกใช้เมธอดจะต้องดำเนินการในเธรด UI
เมธอด onPostExecute ถูกดำเนินการในเธรด UI (ที่นี่คุณสามารถเรียก AsyncTask อื่น!)
พารามิเตอร์อินพุตของงานอาจเป็นอาร์เรย์วัตถุด้วยวิธีนี้คุณสามารถใส่วัตถุและประเภทใดก็ได้ที่คุณต้องการ