2011-09-11 12 views
6

Tôi có một IntentService xếp hàng đợi các cuộc gọi dịch vụ web được thực hiện. Tôi vượt qua một số nguyên như là một Extra với mỗi Intent xác định kiểu gọi dịch vụ web sẽ được thực hiện.Chụp IntentService Intents trước khi onHandleIntent

Tôi muốn tạo một tình huống trong đó nếu Intent thực hiện một dịch vụ web cụ thể được chuyển đến IntentService và Intent cho cùng một dịch vụ web đã tồn tại trong hàng đợi IntentService, Intent không được xử lý. Lý tưởng nhất, tôi sẽ vứt bỏ Intent, nhưng tôi cũng có thể thêm một Extra vào nó cho phép mã biết bỏ qua Intent khi nó được xử lý. Khi Intents đi vào, tôi có thể theo dõi xem cái nào nằm trong hàng đợi trong một số đối tượng mà tôi thêm vào IntentService.

Tuy nhiên, tôi không thấy một nơi để chặn Intent ngay khi nó được chuyển tới IntentService. Theo như tôi có thể nói, tôi chỉ có thể chạm vào nó khi onHandleIntent được gọi và điều đó sẽ là quá muộn.

Bất kỳ ý tưởng nào?

Trả lời

5

nó không nói đúng nên, nhưng tôi muốn đề nghị một cái gì đó như thế này:

public int onStartCommand (Intent intent, int flags, int startId) 
{ 
    // do your intent modification here 
    //if(intentIsDuplicate(intent)) 

    // make sure you call the super class to ensure everything performs as expected 
    return super.onStartCommand(intent, flags, startId); 
} 

Hãy cho tôi biết nếu mà làm việc.

+0

Tôi đã thấy phương pháp này trên tài liệu IntentService, nhưng tôi đã không hoàn toàn chắc chắn khi nó được gọi. Tôi cũng nhận thấy rằng nó không phải là để được ghi đè. Bất kỳ ý tưởng tại sao? – Andrew

+0

Về cơ bản, lệnh gọi 'onStartCommand' nội bộ có thể xử lý hàng đợi: nếu bạn ghi đè lên nó và chắc chắn rằng bạn thực sự gọi phương thức của lớp cha bạn NÊN là tốt. – Femi

+0

Điều này có vẻ hoạt động tốt. Tôi giữ một bản đồ trong đó Khóa là một Số nguyên thể hiện loại dịch vụ web đang được gọi và Giá trị là một Boolean biểu thị cho dù một Intent cho cuộc gọi đó có tồn tại trong hàng đợi hay không. Trong onStartCommand tôi thấy nếu Intent đến là cho một cuộc gọi đã tồn tại trong hàng đợi. Nếu có, tôi thêm một cái gọi là "bỏ qua" vào nó. Trong onHandleIntent, tôi kiểm tra "skip" và bỏ qua bất kỳ mã nào nếu nó tồn tại. Nhưng trước khi rời khỏi onHandleIntent tôi cập nhật bản đồ và đặt Giá trị cho Khóa đó thành sai. – Andrew

Các vấn đề liên quan