17

Trong ứng dụng Android của tôi, tôi bắt đầu một IntentService từ bên trong một Hoạt động bằng cách gọiLàm cách nào để giữ cho IntentService hoạt động ngay cả khi ứng dụng bị đóng?

startService(new Intent(this, MyService.class)); 

Và nó hoạt động như một nét duyên dáng. Tôi có thể di chuyển giữa Activies, nhấn nút Home để chuyển sang các ứng dụng khác ... và nó vẫn hoạt động. Nhưng nếu tôi xóa ứng dụng của mình khỏi màn hình gần đây, dịch vụ của tôi sẽ bị dừng. Làm thế nào tôi có thể tránh điều này? Nói cách khác, làm thế nào tôi có thể giữ cho dịch vụ của tôi chạy ngay cả khi ứng dụng của tôi bị đóng từ các ứng dụng gần đây?

mã dịch vụ của tôi là như sau:

public class MyService extends IntentService { 

public MyService() { 
    super("MyService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    //Here I run a loop which takes some time to finish 
} 

} 
+0

IntentService không chạy tất cả các thời gian, nhưng nó hoạt động trên cơ sở Intent. Bạn gửi, cho phép nói một lệnh để làm (làm một số công việc), bằng cách sử dụng Intent và dịch vụ thực hiện công việc đó và dừng lại sau đó. – Stan

+0

liên quan đến Dịch vụ http://stackoverflow.com/questions/16651009/android-service-stops-when-app-is-closed –

+0

http://stackoverflow.com/questions/19562914/keeping-alive-intent-service liên quan -Sau khi ứng dụng-là-giết –

Trả lời

10

IntentService không chạy tất cả các thời gian, nhưng nó hoạt động trên cơ sở Intent. Bạn gửi, cho phép nói một lệnh để làm (làm một số công việc), bằng cách sử dụng Intent và dịch vụ thực hiện công việc đó và dừng lại sau khi chờ đợi cho Intent khác.
Bạn nên sử dụng thông thường Service thay vì IntentService để đạt được mục tiêu của mình. Dịch vụ phải được định cấu hình là START_STICKY.

+1

Không, tôi không có nghĩa là có dịch vụ của tôi chạy tất cả các thời gian. Dịch vụ của tôi cần thực hiện một hoạt động lâu dài. Những gì tôi cần làm là dịch vụ của tôi tiếp tục thực hiện thao tác đó ngay cả khi ứng dụng của tôi bị đóng cửa gần đây. Khi nó đã kết thúc, nó sẽ tự chấm dứt chính nó – fergaral

+0

Một lần nữa: Bạn nên sử dụng Dịch vụ thông thường thay vì IntentService để đạt được mục tiêu của bạn. – Stan

+0

Tôi sẽ thử nó. Cảm ơn bạn! – fergaral

5

trong lớp dịch vụ của bạn @OverrideonStartCommand phương pháp

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 

To Kill một dịch vụ riêng của mình, bạn có thể sử dụng stopSelf()

+0

Điều này có thực sự an toàn không? Các tài liệu đã nói 'Bạn không nên ghi đè phương thức này cho IntentService của bạn. Thay vào đó, hãy ghi đè lên onHandleIntent (Intent), mà hệ thống sẽ gọi khi IntentService nhận được yêu cầu bắt đầu.' –

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