2010-08-25 34 views
43

Tôi khá mới phát triển Android.Android: Khi nào sử dụng Dịch vụ so với Singleton?

Khi nào bạn nên tạo một dịch vụ Android thay vì chỉ sử dụng một lớp Singleton đơn giản?

Ví dụ: lớp dữ liệu tải xuống nguồn cấp dữ liệu thông tin từ internet.

Sử dụng Dịch vụ có vẻ quá nhiều đối với một số trường hợp nhưng đôi khi tôi có thể cần quyền truy cập vào số Context vì vậy tôi không chắc chắn về cách thiết kế ứng dụng.

Trả lời

42

Nếu quá trình của bạn bị giết (cùng với singleton) ngay lập tức sau khi người dùng rời khỏi hoạt động của nó, sau đó sử dụng một singleton. Nếu bạn cần nó để tiếp tục chạy trong một thời gian sau đó, hãy sử dụng một dịch vụ. Nếu bạn muốn tiếp tục chạy sau khi người dùng rời khỏi nó, nhưng có thể sống với nó không phải vì người dùng hiện đang chuyển sang một thứ gì khác mà bộ nhớ cần nhiều hơn, sau đó sử dụng một singleton.

Quyết định giữa hai số này chỉ chỉ đi xuống vòng đời của ứng dụng của bạn. Vì mục đích này, đó là tất cả một dịch vụ - yêu cầu nền tảng sửa đổi việc quản lý quy trình của bạn. Nếu bạn cần một ngữ cảnh trong một singleton, chỉ cần sử dụng Context.getApplicationContext() để lấy bối cảnh chung cho quá trình của bạn.

+5

Câu cuối cùng của đoạn đầu tiên hơi khó hiểu. Bạn có thể rephrase nó một chút? – chakrit

+0

Tôi nghĩ rằng nó có nghĩa là: Sử dụng một singleton khi bạn muốn quá trình tiếp tục chạy sau khi người dùng rời khỏi nó, nhưng chỉ khi bộ nhớ không cần thiết ở một nơi khác. – mparaz

+1

Vì vậy, ví dụ về tải xuống nguồn cấp thông tin, tôi * đoán * nếu những nguồn cấp dữ liệu đó được đệm trên máy chủ Internet cung cấp chúng, để bạn có thể bắt kịp bất cứ khi nào người dùng quay lại ứng dụng của bạn, * hoặc * nếu bạn chỉ quan tâm về việc xử lý các mục mới từ nguồn cấp dữ liệu chứ không phải hiển thị lịch sử không bị gián đoạn, * sau đó * bạn sẽ ổn với một singleton, nhưng nếu bạn cần ứng dụng của mình tiếp tục theo dõi nguồn cấp dữ liệu trong khi người dùng đang làm điều gì đó khác, bạn sẽ muốn một dịch vụ. Chỉ cần cố gắng làm cho câu hỏi thú vị hơn một chút ... – Carl

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