Tôi đã chạy vào những gì tôi chỉ có thể phân loại là rò rỉ bộ nhớ cho các phần tử ScrollView khi sử dụng thành phần Thư viện.Thêm một ScrollView đơn giản vào Bộ sưu tập gây rò rỉ bộ nhớ
Một nền ngắn. Tôi đã có một ứng dụng hiện có là một ứng dụng trình chiếu hình ảnh. Nó sử dụng thành phần Thư viện, nhưng mỗi phần tử trong bộ điều hợp được hiển thị ở chế độ toàn màn hình. (nguồn đầy đủ có sẵn tại this link)
Bộ điều hợp Xem phần tử bao gồm một ImageView và hai TextView cho tiêu đề và mô tả. Khi ảnh có độ phân giải khá cao, ứng dụng sử dụng khá nhiều bộ nhớ nhưng Bộ sưu tập nói chung quản lý để tái chế chúng tốt.
Tuy nhiên, khi tôi hiện đang triển khai một ScrollView cho TextView mô tả, tôi gần như ngay lập tức gặp vấn đề về bộ nhớ. Đây là thay đổi duy nhất tôi đã thực hiện
<ScrollView
android:id="@+id/description_scroller"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:id="@+id/slideshow_description"
android:textSize="@dimen/description_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_below="@id/slideshow_title"
android:singleLine="false"
android:maxLines="4"/>
</ScrollView>
Tôi đã thực hiện một khối đống và có thể thấy rõ rằng đó là Scrollview vốn là gốc của các vấn đề về bộ nhớ.
Dưới đây là hai ảnh chụp màn hình từ phân tích kết xuất đống. Lưu ý rằng scrollview giữ một tham chiếu đến mParent trong đó bao gồm ảnh lớn tôi sử dụng
PS cùng một vấn đề xảy ra nếu tôi sử dụng di chuyển của TextView (android: scrollbars = "thẳng đứng" và .setMovementMethod (mới ScrollingMovementMethod());
PSS thử tắt bộ nhớ cache vẽ dai dẳng, nhưng không dreaandroid khác nhau: persistentDrawingCache = "none"
Tuyệt vời, điều này dường như đã giải quyết được sự rò rỉ bộ nhớ. Tuy nhiên, tôi không thể tự động cuộn TextView. Đây là mã tôi đang cố gắng sử dụng slideshowDescription.setText (slideshowPhoto.getDescription()); Scroller scroller = new Scroller (ngữ cảnh); slideshowDescription.setScroller (cuộn); cuộn.computeScrollOffset(); int descriptionBottom = slideshowDescription.getBottom(); scroller.startScroll (slideshowDescription.getScrollX(), slideshowDescription.getScrollY(), 0, descriptionBottom, 400); – dparnas
Dường như tôi đã chạy vào vấn đề khét tiếng với chiều cao và các thuộc tính khác không được khởi tạo và do đó có giá trị 0. Nên có thể mã xung quanh đó. Cảm ơn – dparnas
Đã không nhận được cách tiếp cận này để làm việc, nhưng đã tìm thấy một workaround mà tôi sẽ đăng – dparnas