คลาส 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
ได้อธิบายไว้ใน
ส่งคำของานไปยังบริการที่ทำงานอยู่เบื้องหลัง