2014-04-11 12 views
9

Tôi muốn cung cấp cho người dùng thông báo bánh mì nướng mỗi phút 'x', tôi đã cố gắng thực hiện điều này với sự trợ giúp của dịch vụ, nhưng khi ứng dụng bị giết, dịch vụ dừng lại. Cùng một vấn đề xảy ra với Dịch vụ ý định là tốt, tôi nên làm gì để tôi giữ một luồng/dịch vụ trong bộ nhớ ngay cả sau khi ứng dụng bị giết?Làm thế nào để chạy một chuỗi trong nền sau khi ứng dụng bị giết

+1

+1 cho câu hỏi hay – Pankaj

Trả lời

4

Các điều khoản của câu hỏi của bạn là một chút bối rối:

  • ứng dụng nằm trong một quá trình. Nếu quá trình này bị giết, thì mọi thứ đang chạy trong tiến trình đó sẽ bị giết.
  • nếu bạn muốn một cái gì đó để tồn tại cái chết của quá trình, bạn nên sử dụng một quá trình thứ hai và chạy điều để tồn tại bên trong nó.
  • một dịch vụ có thể được chạy theo quy trình riêng của nó, trông giống như một lựa chọn tốt ở đây. Nhìn vào android: quá trình thuộc tính trong thẻ dịch vụ: http://developer.android.com/guide/topics/manifest/service-element.html

Nhưng những gì bạn muốn làm là có lẽ đơn giản: đặt một nhiệm vụ lặp đi lặp lại. Đối với điều này, bạn có thể sử dụng alarm manager.

Bạn có thể, ví dụ:

  • cung cấp người quản lý báo động với một ý định
  • mục đích cấp phát chưa xử lý sẽ kích hoạt một dịch vụ của riêng
  • các dịch vụ của bạn chúng tôi sẽ thức dậy, sau đó chạy. Điều này có lợi thế là không cho phép dịch vụ của bạn luôn chạy và đếm thời gian để biết khi nào nó phải thức dậy (sẽ tiêu hao pin). Ở đây người quản lý báo động sẽ đánh thức nó khi cần thiết, dịch vụ của bạn sẽ chỉ thực hiện nhiệm vụ của nó và chết.

Nếu bạn kết hợp phương pháp này với phần đầu của câu trả lời đó, chạy dịch vụ của bạn theo một quy trình khác, bạn có thể đạt được thứ gì đó thực sự nhẹ cho thiết bị Android: chỉ dịch vụ của bạn (theo quy trình riêng) sẽ thức dậy ở khoảng thời gian nhất định và quy trình của ứng dụng sẽ không được khởi chạy bởi báo thức này, mà chỉ là quy trình của dịch vụ.

Và về thông báo bánh mì nướng, có, dịch vụ là nơi tốt để thực hiện, nhưng thanh thông báo có thể phù hợp hơn để hiển thị thông báo và thông báo cho người dùng biết một số sự kiện đã diễn ra bên trong dịch vụ nền.

+0

Đây là câu trả lời đúng để giải quyết vấn đề. 'AlarmManager' sẽ đảm bảo rằng Người nhận được gọi cứ sau mỗi n phút và không có quá trình nào còn sống để lo lắng. Tuy nhiên, câu trả lời của Adhikari là phù hợp hơn với câu hỏi được hỏi. – velis

1

Thử triển khai dịch vụ nền trước. foreground service

Dịch vụ mặt trước hiển thị thông báo và không bao giờ bị dừng cho đến khi bạn muốn.

Thực hiện đoạn mã này trong onCreate của dịch vụ của bạn

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text), 
     System.currentTimeMillis()); 
Intent notificationIntent = new Intent(this, ExampleActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(this, getText(R.string.notification_title), 
     getText(R.string.notification_message), pendingIntent); 
startForeground(ONGOING_NOTIFICATION_ID, notification); 
+0

Tôi muốn hiển thị một bánh mì nướng chứ không phải thông báo. –

+1

Nếu thông báo được hiển thị thì dịch vụ chạy ở nền trước và không bao giờ dừng hệ thống khác sẽ kết thúc khi tài nguyên được yêu cầu. –

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