Đầu tiên hãy chắc chắn để đọc: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
Chìa khóa để này là trên Android một quá trình chỉ là một container cho mã - - hoặc cụ thể là một hoặc nhiều thành phần (hoạt động, dịch vụ, người nhận, nhà cung cấp). Theo mặc định, tất cả các thành phần trong một .apk đều có được quy trình riêng, riêng của chúng, tất cả chúng đều chạy cùng nhau. Điều này gần như luôn luôn là những gì bạn muốn.
Khi người dùng tương tác trực tiếp với một thành phần của quá trình đó (đó là một hoạt động), Android sẽ cố gắng hết sức để giữ cho quá trình đó chạy, và bạn sẽ không thấy nó bị chết trừ trường hợp bất thường.
Khi người dùng không còn tương tác trực tiếp với quy trình, khi đó người dùng sẽ trở nên có thể tiêu thụ tương ứng với các quy trình khác như được mô tả trong tài liệu được tham chiếu. Đó là, các quy trình rỗng (không có thành phần thú vị) sẽ bị giết trước khi các tiến trình giữ các hoạt động mà người dùng đã sử dụng, sẽ bị giết trước các tiến trình với các dịch vụ đang chạy. Vì vậy, có một dịch vụ đang chạy sẽ có xu hướng để giữ cho quá trình của bạn xung quanh tại các chi phí của các quá trình khác.
Đồng thời, chúng ta cần phải xử lý tốt với ngày càng nhiều ứng dụng để các dịch vụ chạy, thường xuyên vô thời hạn và thường bị rò rỉ bộ nhớ. Vì vậy, có một dịch vụ chạy trong một thời gian dài, Android sẽ cố gắng ít hơn và ít khó khăn hơn để giữ cho quá trình của nó diễn ra. Có hiệu quả điều này có nghĩa là di chuyển nó xuống xô nền cho đến khi kẻ giết người ra khỏi bộ nhớ lấy nó ra. Sau đó, nếu dịch vụ vẫn muốn chạy, thì một quy trình mới sẽ được tạo để khởi động lại.
Điều này là do các dịch vụ thông thường đang chạy trong một thời gian dài. sẽ bị giết sau một thời gian.Điều này không cần phải dừng dịch vụ; một dịch vụ muốn tiếp tục chạy sẽ làm như vậy, nó sẽ chỉ cần được khởi tạo trong một quy trình mới. Tất nhiên miễn là người dùng đang tương tác với một hoạt động trong quá trình của bạn, quá trình này sẽ không bị giết, vì điều này sẽ kéo nó vào danh mục nền trước bất kể những gì đang xảy ra với bất kỳ dịch vụ nào trong đó.
cảm ơn câu trả lời hữu ích của bạn! để cụ thể hơn một chút: Tôi phân lớp từ Ứng dụng và trong đó tôi giữ một tham chiếu đến đối tượng Dịch vụ của mình. Khi dịch vụ của tôi bị giết, làm cách nào tôi có thể lấy lại tài liệu tham khảo về dịch vụ mới? hoặc đối tượng ứng dụng của tôi cũng chết cùng và khi nó được tái instantiated tất cả mọi thứ là giống như khi tôi lần đầu tiên bắt đầu ứng dụng? – Erdal
Khi giết một cái gì đó cho bộ nhớ, toàn bộ quá trình (bao gồm cả các đối tượng ứng dụng) bị giết và không có mã thực hiện trong nó vào thời điểm này. Nếu dịch vụ vừa bị hủy vì không còn cần chạy nữa, lệnh onDestroy() của nó sẽ được gọi và khi dịch vụ này sau đó cần một cá thể mới được tạo và onCreate() được gọi. Cá nhân tôi thường khuyên bạn không nên sử dụng Ứng dụng; nó không thực sự cung cấp cho bạn bất cứ điều gì trên chỉ sử dụng các lớp singleton tĩnh, và tôi nghĩ rằng thiết lập kỳ vọng cho mọi người (w.r.t. có một mô hình ứng dụng truyền thống hơn) mà không thực sự giữ. – hackbod
Tôi hiểu ý của bạn là gì. Vấn đề duy nhất tôi có, buộc tôi phải sử dụng lớp Ứng dụng là tôi không muốn liên kết với Dịch vụ từ tất cả các Hoạt động khác nhau của mình. Tôi chỉ gọi ràng buộc trong phương thức onCreate của ứng dụng và sau đó tất cả các hoạt động khác truy cập Dịch vụ thông qua ứng dụng Singleton của tôi. Bạn có gợi ý điều gì tốt hơn không? – Erdal