หากเราดูซอร์สโค้ดเราจะเห็นAsyncTaskและHandlerเขียนเป็นภาษาจาวาอย่างแท้จริง (มีข้อยกเว้นอยู่บ้าง แต่นั่นไม่ใช่ประเด็นสำคัญ)
ดังนั้นจึงมีความมหัศจรรย์ในไม่มีหรือAsyncTask Handlerคลาสเหล่านี้ทำให้ชีวิตของเราง่ายขึ้นในฐานะนักพัฒนา
ตัวอย่างเช่น: หากโปรแกรม A วิธีการโทร A () วิธี A () สามารถทำงานในเธรดอื่นด้วยโปรแกรม A เราสามารถตรวจสอบได้อย่างง่ายดายด้วยรหัสต่อไปนี้:
Thread t = Thread.currentThread();
int id = t.getId();
ทำไมเราควรใช้เธรดใหม่สำหรับงานบางอย่าง? คุณสามารถ google มัน ด้วยเหตุผลหลายประการเช่นยกงานหนักทำงานยาว
ดังนั้นสิ่งที่เป็นความแตกต่างระหว่างThread, AsyncTaskและHandler?
AsyncTaskและHandlerเขียนเป็นภาษาจาวา (ใช้ภายในThread) ดังนั้นทุกสิ่งที่เราสามารถทำได้ด้วยHandlerหรือAsyncTaskเราก็สามารถใช้งานได้Threadเช่นกัน
สิ่งที่สามารถHandlerและAsyncTaskจริงๆช่วย?
เหตุผลที่ชัดเจนที่สุดคือการสื่อสารระหว่างเธรดผู้โทรและเธรดผู้ทำงาน ( เธรดผู้โทร : เธรดที่เรียกเธรดของผู้ทำงานเพื่อทำงานบางอย่างเธรดการโทรไม่จำเป็นต้องเป็นเธรด UI) แน่นอนเราสามารถสื่อสารระหว่างสองเธรดในวิธีอื่น ๆ แต่มีข้อเสียมากมาย (และอันตราย) เนื่องจากความปลอดภัยของเธรด
นั่นคือเหตุผลที่เราควรใช้และHandler AsyncTaskคลาสเหล่านี้ทำงานส่วนใหญ่ให้กับเราเราจำเป็นต้องรู้วิธีการที่จะแทนที่
ความแตกต่างระหว่างHandlerและAsyncTaskเป็น: ใช้AsyncTaskเมื่อด้าย Callerเป็นหัวข้อ UI นี่คือเอกสาร Android ที่บอกว่า:
AsyncTask ช่วยให้สามารถใช้เธรด UI ที่เหมาะสมและง่ายดาย คลาสนี้อนุญาตให้ดำเนินการพื้นหลังและเผยแพร่ผลลัพธ์บนเธรด UI โดยไม่ต้องจัดการกับเธรดและ / หรือตัวจัดการ
ฉันต้องการเน้นสองจุด:
1) การใช้เธรด UI อย่างง่ายดาย (ดังนั้นใช้เมื่อเธรดผู้โทรคือเธรด UI)
2) ไม่จำเป็นต้องจัดการกับตัวจัดการ (หมายถึง: คุณสามารถใช้ตัวจัดการแทน AsyncTask แต่ AsyncTask เป็นตัวเลือกที่ง่ายกว่า)
มีหลายสิ่งในโพสต์นี้ที่ฉันยังไม่ได้พูดเช่น: UI Thread คืออะไรหรือทำไมง่ายกว่า คุณต้องรู้วิธีการบางอย่างหลังแต่ละชั้นเรียนและใช้มันคุณจะเข้าใจเหตุผลอย่างสมบูรณ์
@: เมื่อคุณอ่านเอกสาร Android คุณจะเห็น:
ตัวจัดการช่วยให้คุณสามารถส่งและประมวลผลข้อความและวัตถุที่เรียกใช้ที่เชื่อมโยงกับ MessageQueue ของเธรด
คำอธิบายนี้อาจดูแปลกในตอนแรก เราต้องเข้าใจว่าแต่ละเธรดมีคิวข้อความแต่ละรายการ (เช่นรายการที่ต้องทำ) และเธรดจะใช้แต่ละข้อความและทำจนกว่าคิวข้อความจะว่างเปล่า (เหมือนกับที่เราทำงานให้เสร็จและเข้านอน) ดังนั้นเมื่อHandlerสื่อสารมันก็แค่ให้ข้อความไปยังผู้โทรด้ายและมันจะรอการประมวลผล
ซับซ้อน? เพียงจำไว้ว่าHandlerสามารถสื่อสารกับผู้โทรเข้าเธรดได้อย่างปลอดภัย