2012-12-19 35 views
5

Tôi có một hoạt động mà người dùng có thể tiến hành từ một đoạn này sang phân đoạn khác. Đoạn bắt đầu, tải xuống một số dữ liệu và hiển thị nó (cùng với việc vẽ một số biểu tượng từ tài nguyên, v.v.). Người dùng có thể tiếp tục di chuyển về phía trước thông qua các đoạn phim miễn là họ thích (cho đến khi họ cảm thấy buồn chán?).Các vấn đề về bộ nhớ với một số lượng lớn các đoạn trong ngăn xếp phía sau

Vấn đề là, lỗi OutOfMemoryError cuối cùng sẽ xảy ra (sau khoảng 90 đoạn trên một vùng lưu trữ 32mb vm). 90 có vẻ như khá nhiều, nhưng tôi đã nhìn thấy báo cáo lỗi bộ nhớ như vậy trong lĩnh vực này, vì vậy có lẽ điều này xảy ra trước đó trên các thiết bị cấp thấp hơn. Tôi đã chắc chắn rằng bất kỳ chế độ xem nào tôi tạo trong onCreateView tôi sẽ vô hiệu hóa trong onDestroyView. Các đối tượng khác duy nhất mà các mảnh của tôi nắm giữ (theo như tôi có thể nói) là dữ liệu mà nó tải xuống khi bắt đầu, thường chỉ có 10-50kb.

Câu hỏi đầu tiên của tôi là, điều này có bình thường không? Tôi có thể mong đợi 'chỉ' có thể có ~ 90 mảnh trong ngăn xếp lại không? Hay tôi bị rò rỉ bộ nhớ ở đâu đó mà tôi có thể làm gì đó?

Nếu người dùng rời khỏi ứng dụng của tôi và Android quyết định hủy toàn bộ quá trình để giải phóng bộ nhớ, khi người dùng trả về bộ nhớ được sử dụng ít hơn nhiều vì toàn bộ tiểu bang đã được khôi phục từ nhóm. Nếu sau đó người dùng quay lại thông qua ngăn xếp sau, mỗi đoạn sẽ được tạo/tiếp tục từ savedinstancestate.

Vì vậy, câu hỏi thứ hai của tôi là, có cách nào để buộc điều này xảy ra không? Tức là, 'nếu có> 50 mảnh trong ngăn xếp phía sau, hãy bắt đầu giết những phần ở dưới cùng để saveInstanceState?'

Trả lời

-6

Hãy thử điều này trong thẻ AndroidManifest.xml trong <Application> của bạn:

android:largeHeap="true" 

và cung cấp mã của bạn để giúp nhiều hơn nữa.

+3

Đây là lời khuyên khủng khiếp - và chỉ nhân tạo kéo dài bao nhiêu mảnh hơn, bạn có thể đóng gói trong - vấn đề này vẫn còn. Google tuyên bố không sử dụng điều này để giải quyết rò rỉ bộ nhớ. –

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