Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

list场景下有内存泄露,会一直new SkinView,导致多次滑动之后占用的内存会一直增加

Đang mở
#19 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
45/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
android, java
Lĩnh vực
mobile, performance

Hướng nghiên cứu

Bắt đầu từ phương thức getView của adapter và lần theo SkinManager.getInstance().injectSkin đến getSkinView, tập trung vào việc tạo SkinView được đánh dấu và xử lý view-tag. Lặp lại thao tác cuộn danh sách, sau đó xác minh rằng các instance SkinView không tiếp tục tăng lên sau mỗi lần gọi getView, trong khi việc inject skin vẫn hoạt động đối với các hàng được tái sử dụng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, parent, false);
}
SkinManager.getInstance().injectSkin(convertView);
TextView tv = (TextView) convertView.findViewById(R.id.id_tv_title);
tv.setText(getItem(position));
return convertView;
}

public static SkinView getSkinView(View view) {
Object tag = view.getTag(R.id.skin_tag_id);
if (tag == null)
{
tag = view.getTag();
}
if (tag == null) return null;
if (!(tag instanceof String)) return null;
String tagStr = (String) tag;

    List<SkinAttr> skinAttrs = parseTag(tagStr);
    if (!skinAttrs.isEmpty())
    {
        changeViewTag(view);
        **return new SkinView(view, skinAttrs);**
    }
    return null;
}

SkinManager.getInstance().injectSkin每次都会new一个SkinView出来,SkinView的总数量等于getView被调用的总次数,而不是getItemCount的值

Ngôn ngữ chính
Java
Star
1.7k
Fork
364
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Chúng tôi chưa kiểm tra các tệp thiết lập môi trường của dự án này. Hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của hongyangAndroid/AndroidChangeSkin

Tất cả issue của hongyangAndroid/AndroidChangeSkin

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.