2012-06-29 30 views
5
private void setFPAlarm() 
    { 
    Intent intent = new Intent(this, FPService.class); 
    PendingIntent pi = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    long nextSearchTimeMillis = DateUtils.MINUTE_IN_MILLIS/2; 
    Time nextSearchTime = new Time(); 
    nextSearchTime.set(nextSearchTimeMillis); 

    AlarmManager FPAlarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    FPAlarm.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), nextSearchTimeMillis, pi); 
    } 

Tôi đang sử dụng mã trên để chạy IntentService mỗi 30 giây. Đôi khi, một quá trình dịch vụ mất hơn 30 giây để một số khác phải bắt đầu trước khi quá trình dịch vụ kết thúc. Tôi muốn biết điều gì sẽ xảy ra với cái trước đó trong trường hợp đó. Nó có bị giữ không? Liệu người thứ hai chờ cho người trước đó kết thúc?Nhiều trường hợp của IntentService trong Android

Câu hỏi thứ hai của tôi là: Tôi không muốn họ chờ đợi nhau. Tôi muốn hai dịch vụ chạy đồng thời. Vì vậy, các dịch vụ tiếp theo nên bắt đầu bất kể những gì trước đó đang làm. Là trên mã đúng cách để đạt được điều này?

+0

Không biết nhưng hãy thử mã này. intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); – rajpara

Trả lời

9

IntentService giống như hàng đợi yêu cầu công việc. Một ý định mới không được xử lý cho đến khi onHandleIntent kết thúc cho Intent trước đó. Tại sao bạn muốn chạy IntentService cứ 30 giây một lần nếu đôi khi mất hơn 30 giây để hoàn tất?

Về đặt câu hỏi, đôi khi câu trả lời cho câu hỏi hẹp là "bạn không thể làm những gì bạn muốn làm" hoặc "những gì bạn đang làm sẽ không làm những gì bạn nghĩ". Nếu bạn cung cấp ngữ cảnh vấn đề, thì người trả lời dễ dàng hơn là thêm một giải pháp tốt hơn.

Trong trường hợp của bạn, tôi chỉ có thể đoán rằng bạn nên kích hoạt Intent đến IntentService bất cứ khi nào bạn cần, và để cơ chế xếp hàng của IntentService xử lý phần còn lại. Thay vào đó, bạn có thể sử dụng một dịch vụ thông thường và một threadpool.

+0

Vì tôi đang ghi một truy vấn âm thanh ngắn cứ 30 giây một lần và sử dụng một số xử lý tín hiệu trên đó. Tôi yêu cầu một kết quả khác nhau cho các truy vấn khác nhau. – Erol

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