2012-02-26 23 views
14

Tôi có một ứng dụng Android bao gồm hoạt động và dịch vụ. Hiện tại cả hai đều tồn tại trong cùng một quá trình và sử dụng cùng một đống nhưng tôi muốn phải tách riêng quá trình/heap cho dịch vụ. I E. Tôi muốn dịch vụ hoàn toàn độc lập với hoạt động để nếu hoạt động bị treo, nó sẽ không ảnh hưởng đến dịch vụ. Tuy nhiên, tôi muốn chúng có thể cài đặt như một ứng dụng đơn lẻ. Điều này có thể không?Cách tạo Hoạt động và Dịch vụ Android sử dụng các quy trình riêng lẻ

Trả lời

22

Chắc chắn có thể. Xem process thuộc tính cho service trong AndroidManifest.xml

http://developer.android.com/guide/topics/manifest/service-element.html

Để báo:

Tên của quá trình mà dịch vụ này để chạy. Thông thường, tất cả các thành phần của một ứng dụng chạy trong tiến trình mặc định được tạo cho ứng dụng. Nó có cùng tên với gói ứng dụng. Thuộc tính quy trình của phần tử có thể đặt mặc định khác cho tất cả các thành phần. Nhưng thành phần có thể ghi đè lên mặc định bằng thuộc tính quy trình riêng của nó, cho phép bạn trải rộng ứng dụng của mình trên nhiều quy trình.

Nếu tên được gán cho thuộc tính này bắt đầu bằng dấu hai chấm (':'), một quy trình mới, riêng tư cho ứng dụng, được tạo khi cần và dịch vụ chạy trong quá trình đó. Nếu tên tiến trình bắt đầu bằng một ký tự chữ thường, dịch vụ sẽ chạy trong một tiến trình toàn cầu của tên đó, với điều kiện là nó có quyền làm như vậy. Điều này cho phép các thành phần trong các ứng dụng khác nhau chia sẻ một quy trình, giảm sử dụng tài nguyên.

+0

Tốt. @lyricsboy nhưng một câu hỏi: trong kịch bản của OP, khi Android giết Activity (do đó ứng dụng), nó cũng sẽ giết chết Dịch vụ đang chạy nếu nó đang trên cùng một quá trình? –

+0

Nó phụ thuộc vào cách dịch vụ được bắt đầu (chế độ nào) và các yếu tố khác liên quan đến bộ nhớ. Bạn có thể tìm thêm chi tiết cụ thể tại: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html – lyricsboy

+0

Cảm ơn, điều đó đã làm điều đó – chris

5

IPC cho các dịch vụ là IMHO chỉ bắt buộc nếu dịch vụ phải được các ứng dụng khác tiêu thụ.

Chạy dịch vụ trong quy trình riêng của nó có những lợi thế nhỏ mà bộ thu gom rác cho dịch vụ không ảnh hưởng đến ứng dụng của bạn và dấu chân bộ nhớ của dịch vụ hơi nhỏ hơn một chút nếu chạy một mình.

Nếu việc sử dụng dịch vụ của các ứng dụng khác không phải là yêu cầu đối với bạn, hãy chọn dịch vụ địa phương. Ngoài ra, bạn vẫn có thể chạy dịch vụ theo quy trình riêng và sử dụng giao tiếp khác với ứng dụng của bạn, ví dụ: thông qua bộ thu phát sóng. Tôi đã cố gắng mô tả các cách tiếp cận khác nhau trong hướng dẫn dịch vụ Android của tôi theo liên kết sau: Activity and service communication.

+0

không phải là (dịch vụ trong quy trình tách biệt) cách duy nhất để ngăn dịch vụ gọi điện riêng của mình khi hủy cuộc gọi khi hoạt động gọi bị hủy? – EsmaeelQash

+0

Xin chào Vogella, bạn có thể vui lòng giải thích cho tôi bất kỳ scenerio nào mà chúng tôi không muốn "tiêu thụ dịch vụ bởi các ứng dụng khác", tôi không nhận được thuật ngữ này. cảm ơn – SRam

+0

Chạy dịch vụ trong một quy trình riêng biệt giúp đảm bảo rằng, nếu quá trình của ứng dụng chính bị chấm dứt, dịch vụ có thể tiếp tục. Điều này khá hữu ích. – Luca

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