2013-03-02 30 views
8

Trong Android tôi có lớp singleton nhưng tôi không chắc liệu Bộ thu gom rác có thể giải quyết nó hay không.Thùng rác có thể thu gom được không? (và lý do tại sao hoặc làm thế nào để tránh nó)

Nếu rác Người thu gom sẽ giải quyết lớp học đơn của tôi làm sao có thể tránh được nó từ việc deallocation?

+0

Có ước của việc sử dụng WeakReference, cố gắng sử dụng đó. – IamStalker

Trả lời

1

Lý do duy nhất gc sẽ dealocate dụ của bạn là nếu toàn bộ ứng dụng bị phá hủy ...

+1

Khi toàn bộ ứng dụng bị phá hủy, GC cũng sẽ bị phá hủy .. –

+1

Điều này là giả mạo: Xem xét: 'static {new Object(); } 'Đó là một singleton và nó là rác thu thập ngay lập tức. –

3

Thu gom rác thu thập các đối tượng không có gì được chỉ ra, trừ khi một tài liệu tham khảo là tĩnh. Are static fields open for garbage collection?

+1

Không có điều như vậy, trong Java, như là một "đối tượng tĩnh". –

+0

Cấu trúc của đối tượng không thể được khai báo là tĩnh, nhưng bạn có thể có một tham chiếu tĩnh/cá thể của nó. Trả lời chỉnh sửa để nói tham khảo. – Shellum

+0

Vâng! Tôi nghĩ, mặc dù, bạn có thể chỉ cần bỏ qua toàn bộ điều về tài liệu tham khảo tĩnh. Câu trả lời của bạn đã hoàn chỉnh và chính xác, tại dấu phẩy! –

1

Có rất nhiều cách để triển khai Singleton. Một trong những điều tốt nhất là:

public static enum My { SINGLETON; } 

Có hay không một cái gì đó là một singleton không mang về cho dù đó là GC hay không. Một đối tượng sẽ được GC nếu không có tham chiếu mạnh mẽ cho nó. Tra cứu nó (http://weblogs.java.net/blog/2006/05/04/understanding-weak-references).

Có một vấn đề nữa mà bạn quan tâm. Trong Android, ứng dụng của bạn không kiểm soát vòng đời của nó. Có thể là một quá trình sẽ bị chấm dứt và tái tạo theo những cách bạn không mong đợi. Nếu điều đó xảy ra, các biến cuối cùng tĩnh sẽ được khởi tạo lại. Có thêm về đó ở đây:

http://portabledroid.wordpress.com/2012/05/04/singletons-in-android/

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