2014-09-15 19 views
5

Đây là câu hỏi tiếp theo cho một trong số previous questions của tôi.Các lớp học có phương pháp tĩnh tồn tại trong Android trong bao lâu?

Tôi có một LoadingActivity tải một số đồ họa cần thiết cho tất cả các Hoạt động và lưu trữ nó vào một lớp tĩnh. Tôi cố gắng không tải lại LoadingActivity khi nhấn HOME và tiếp tục ứng dụng vì nó mất rất nhiều bộ nhớ và hết dung lượng sau vài lần theo đó đồ họa đã được tải, vì vậy không cần phải khởi động lại LoadingActivity nữa. Câu hỏi của tôi là, lớp tĩnh tồn tại bao lâu? Tôi có thể dựa vào tính khả dụng sau khi tiếp tục ứng dụng hay không có thể nó ở đây vì Android giết nó do sự cố bộ nhớ hoặc luôn ở đây miễn là vm chạy (điều đó có nghĩa là điện thoại đang chạy)?

+0

Tôi tin rằng chúng vẫn tồn tại miễn là quá trình đăng ký của bạn vẫn hoạt động. Nhưng việc giữ các tham chiếu đối tượng như Static không bao giờ là một ý tưởng hay trong phát triển ứng dụng, nơi bộ nhớ của thiết bị bị hạn chế. – waqaslam

+2

Các lớp tĩnh được gắn liền với vòng đời của ứng dụng, đó là ở phần mềm AFAIK của Android. KHÔNG BAO GIỜ bao giờ dựa vào các lớp tĩnh. Giai đoạn. – Machinarius

+0

Bởi "lớp tĩnh", bạn có nghĩa là tham chiếu đến "đối tượng tĩnh"? Bạn có thể muốn làm rõ ... có vẻ như bạn đang hỏi về các lớp được khai báo với 'lớp tĩnh'. –

Trả lời

6

Khi Simon chỉ ra, "lớp tĩnh" nghĩa là các thứ khác nhau trong các ngôn ngữ khác nhau và Java không có bất kỳ thứ gì giống như các lớp tĩnh ở một số ngôn ngữ khác. Nhưng tôi không nghĩ đó là những gì bạn đang nói đến. Bạn dường như đang hỏi liệu các đối tượng được tham chiếu bởi các tham chiếu tĩnh mạnh có thể được thu gom rác hay không. Nếu vậy, câu trả lời là không.

Lớp được đại diện bởi một đối tượng thuộc lớp Class có thể truy cập thông qua ClassLoader. Do đó, bất kỳ thứ gì được tham chiếu bởi Class sẽ có thể truy cập miễn là ClassLoader có thể truy cập được, trong trường hợp bộ nạp lớp hệ thống miễn là máy ảo Java/Dalvik tồn tại. Nhưng đó là không phải miễn là điện thoại chạy, vì một máy ảo độc lập được tạo cho mỗi ứng dụng. Toàn bộ quá trình và máy ảo trong đó ứng dụng đang chạy có thể bị xóa bất cứ khi nào ứng dụng ở chế độ nền. Khi bạn quay lại ứng dụng, các lớp của ứng dụng sẽ được tải lại.

Nếu trường tĩnh thực sự là lựa chọn tốt nhất, thay vì ContentProvider hoặc foregound Service, thì mỗi lần ứng dụng của bạn tiếp tục, bạn sẽ cần phải kiểm tra xem các tham chiếu tĩnh đã được khởi tạo hay khởi tạo lại chúng chưa.

+0

Đây chỉ là sai. Không có điều gì như một lớp tĩnh, trừ khi bạn đang đề cập đến một lớp bên trong tĩnh bên trong một đối tượng. Bạn đang nói về POJO hoặc Hoạt động có tham chiếu tĩnh không? Hoặc các trường lớp được khởi tạo tĩnh? Vì Java không có các lớp tĩnh, tôi sẽ bỏ phiếu cho câu trả lời cho đến khi bạn làm rõ. – Simon

+0

Làm rõ. **** –

+0

Về lý thuyết, một ClassLoader đã cho và tất cả các lớp mà nó nạp có thể được gỡ bỏ bởi máy ảo. Ứng dụng Android được tải bằng trình tải tùy chỉnh, không phải là trình tải "hệ thống". Trong thực tế, Dalvik không dỡ bỏ các lớp, do đó, nó là một điểm tranh luận. – fadden

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