Kể từ the docs:
Các IntentService
nào sau đây:
- Tạo một sợi công nhân mặc định mà thực hiện tất cả ý định được phân phối tới
onStartCommand()
tách biệt khỏi chuỗi chính của ứng dụng của bạn.
- Tạo hàng đợi công việc chuyển một mục đích tại một thời điểm để triển khai
onHandleIntent()
của bạn, vì vậy bạn không bao giờ phải lo lắng về việc phân luồng đa luồng .
- Dừng dịch vụ sau khi tất cả các yêu cầu bắt đầu đã được xử lý, vì vậy bạn không bao giờ phải gọi
stopSelf()
.
- Cung cấp triển khai mặc định
onBind()
trả về null
.
- Cung cấp triển khai mặc định
onStartCommand()
gửi mục đích đến hàng đợi công việc và sau đó thực hiện onHandleIntent()
của bạn.
Và cũng:
Tất cả điều này cho biết thêm lên đến thực tế là tất cả các bạn cần làm là thực hiện onHandleIntent()
để làm công việc được cung cấp bởi khách hàng. (Mặc dù, bạn cũng cần phải cung cấp một constructor nhỏ cho dịch vụ.)
Vì vậy, một IntentService
là một "Custom" Service
với những tính chất đặc biệt. Vì vậy, không cần phải ghi đè lên số onStartCommand()
, trên thực tế, bạn không nên làm điều đó trừ khi bạn đang sử dụng lớp Service
thông thường.
Một số ví dụ về IntentService
sử dụng:
Activity.java
Intent it = new Intent(getApplicationContext(), YourIntentService.class);
it.putExtra("Key", "Value");
startService(it);
YourIntentService.java
public YourIntentService() {
super("YourIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
String str = intent.getStringExtra("key");
// Do whatever you need to do here.
}
//...
}
Bạn cũng có thể kiểm tra this tutorial hoặc this one để biết thêm về Service
và IntentService
.
Ngoài ra, hãy kiểm tra the docs.
Chà, điều này cực kỳ kỹ lưỡng. Câu trả lời hay! – AdamMc331
Tôi đã trải qua các hướng dẫn, chúng rất tuyệt! Nhưng vấn đề là tôi đã không 'vượt quá' onStartCommand' hoặc 'onHandleIntent'? – Chromium
Bạn đã nói về câu hỏi mà bạn đã ghi đè lên 'onStartCommand', và bạn không nên làm điều đó trên' IntentService'. Sử dụng 'onHandleIntent' thay vào đó, nó sẽ tự động được gọi. – Mauker