คลาส IntentService มีโครงสร้างง่ายๆ สำหรับการวิ่ง
การดำเนินการในชุดข้อความเบื้องหลังเดี่ยว ซึ่งช่วยให้จัดการการดำเนินการที่ใช้เวลานานได้
โดยไม่ส่งผลต่อการตอบสนองของอินเทอร์เฟซผู้ใช้ นอกจากนี้
IntentService ไม่ได้รับผลกระทบจากเหตุการณ์ส่วนใหญ่ในวงจรของผู้ใช้ ดังนั้น
จะยังคงทำงานต่อไปในสถานการณ์ที่จะทำให้ AsyncTask หยุดทำงาน
IntentService มีข้อจำกัดบางอย่างดังนี้
-
โดยจะไม่สามารถโต้ตอบกับอินเทอร์เฟซผู้ใช้ของคุณโดยตรง หากต้องการนำผลการค้นหาไปไว้ใน UI คุณจะต้อง
คุณต้องส่งไปยัง
Activity -
คำของานจะทำงานตามลำดับ หากมีการดำเนินการใน
IntentServiceและคุณส่งคำขออีกครั้ง คำขอจะรอจนถึง การทำงานแรกเสร็จสิ้นแล้ว -
การดำเนินการที่ทำงานใน
IntentServiceต้องไม่หยุดชะงัก
แต่ในกรณีส่วนใหญ่ IntentService เป็นวิธีที่เหมาะสม
การดำเนินงานเบื้องหลังอย่างง่าย
คู่มือนี้จะแสดงวิธีทำสิ่งต่างๆ ต่อไปนี้
- สร้างคลาสย่อยของ
IntentServiceของคุณเอง - สร้างเมธอด Callback ที่จำเป็น
onHandleIntent() - นิยาม
IntentServiceในไฟล์ Manifest
จัดการ Intent ขาเข้า
หากต้องการสร้างคอมโพเนนต์ IntentService สำหรับแอป ให้กำหนดคลาสที่
ขยาย IntentService และภายใน URL ดังกล่าว ให้กำหนดวิธีการที่
ลบล้าง onHandleIntent() เช่น
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
โปรดสังเกตว่าการเรียกกลับอื่นๆ ของคอมโพเนนต์ Service ปกติ เช่น
onStartCommand()จะเรียกโดยอัตโนมัติโดย
IntentService ใน IntentService คุณควรหลีกเลี่ยง
และลบล้าง Callback เหล่านี้
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการสร้าง IntentService โปรดดูที่การขยาย
คลาส IntentService
กำหนดบริการ Intent ในไฟล์ Manifest
IntentService ต้องมีรายการในไฟล์ Manifest ของแอปพลิเคชัน
ระบุรายการนี้เป็น
<service>
องค์ประกอบย่อยของ
องค์ประกอบ
<application>:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
แอตทริบิวต์ android:name ระบุชื่อคลาสของ
IntentService
โปรดสังเกตว่า
<service>
ไม่มีองค์ประกอบ
ตัวกรองความตั้งใจ
Activity ที่ส่งคำของานไปยังบริการจะใช้
ชัดเจน Intent จึงไม่ต้องมีตัวกรอง ยัง
หมายความว่ามีเพียงคอมโพเนนต์ในแอปเดียวกัน หรือแอปพลิเคชันอื่นที่มี
รหัสผู้ใช้เดียวกันสามารถเข้าถึงบริการได้
ตอนนี้คุณมีชั้นเรียน IntentService พื้นฐานแล้ว คุณจะส่งคำของานได้
กับออบเจ็กต์ Intent รายการ กระบวนการสร้างวัตถุเหล่านี้
และส่งไปยัง IntentService ได้อธิบายไว้ใน
ส่งคำของานไปยังบริการที่ทำงานอยู่เบื้องหลัง