2015-05-28 13 views
7

Tôi đã nhìn thấy thời gian tải rất dài cho hình ảnh trong ứng dụng của chúng tôi bằng cách sử dụng Glide 3.6 + RecyclerView bằng GridLayoutManager. Những hình ảnh này có kích thước khoảng 20kb-40kb. Có vẻ như việc lướt xếp hàng lên tất cả các yêu cầu làm cho hình ảnh mất một thời gian để tải một khi bạn bắt đầu cuộn xuống dưới danh sách. Tôi đã đính kèm các bản ghi từ lớp GenericRequest.Glide có xếp hàng lên mọi yêu cầu ảnh không? Tải lại Recyclerview rất chậm khi cuộn

V/GenericRequest﹕ finished setup for calling load in 0.170291 this: 249721749 
V/GenericRequest﹕ finished onSizeReady in 0.36724999999999997 this: 249721749 
V/GenericRequest﹕ finished run method in 0.763083 this: 249721749 
V/GenericRequest﹕ Got onSizeReady in 0.041249999999999995 this: 991315424 
V/GenericRequest﹕ finished setup for calling load in 0.15479199999999999 this: 991315424 
V/GenericRequest﹕ finished onSizeReady in 0.30008399999999996 this: 991315424 
V/GenericRequest﹕ finished run method in 0.499959 this: 991315424 
V/GenericRequest﹕ Got onSizeReady in 0.060584 this: 1029510845 
V/GenericRequest﹕ finished setup for calling load in 0.200625 this: 1029510845 
V/GenericRequest﹕ finished onSizeReady in 0.39233399999999996 this: 1029510845 
V/GenericRequest﹕ finished run method in 0.670084 this: 1029510845 
V/GenericRequest﹕ Got onSizeReady in 0.048374999999999994 this: 516458536 
V/GenericRequest﹕ finished setup for calling load in 0.188666 this: 516458536 
V/GenericRequest﹕ finished onSizeReady in 0.379916 this: 516458536 
V/GenericRequest﹕ finished run method in 0.654083 this: 516458536 
V/GenericRequest﹕ Resource ready in 1012.49325 size: 2.18359375 fromCache: false this: 671303046 
V/GenericRequest﹕ Got onSizeReady in 0.073833 this: 356666200 
V/GenericRequest﹕ finished setup for calling load in 0.240667 this: 356666200 
V/GenericRequest﹕ finished onSizeReady in 0.460792 this: 356666200 
V/GenericRequest﹕ finished run method in 0.780708 this: 356666200 
V/GenericRequest﹕ Got onSizeReady in 0.064583 this: 347417463 
V/GenericRequest﹕ finished setup for calling load in 0.242583 this: 347417463 
V/GenericRequest﹕ finished onSizeReady in 0.45758299999999996 this: 347417463 
V/GenericRequest﹕ finished run method in 0.7521249999999999 this: 347417463 
V/GenericRequest﹕ Got onSizeReady in 0.142833 this: 671303046 
V/GenericRequest﹕ finished setup for calling load in 0.38966599999999996 this: 671303046 
V/GenericRequest﹕ finished onSizeReady in 0.703708 this: 671303046 
V/GenericRequest﹕ finished run method in 1.851125 this: 671303046 
V/GenericRequest﹕ Got onSizeReady in 0.056957999999999995 this: 634418527 
V/GenericRequest﹕ finished setup for calling load in 0.21787499999999999 this: 634418527 
V/GenericRequest﹕ finished onSizeReady in 0.443083 this: 634418527 
V/GenericRequest﹕ finished run method in 0.7567499999999999 this: 634418527 
V/GenericRequest﹕ Resource ready in 3443.041335 size: 2.18359375 fromCache: false this: 249721749 
V/GenericRequest﹕ Resource ready in 4110.604794 size: 3.8623809814453125 fromCache: false this: 1054166306 
V/GenericRequest﹕ Resource ready in 3824.033544 size: 3.8623809814453125 fromCache: false this: 991315424 
V/GenericRequest﹕ Resource ready in 3773.0562109999996 size: 3.8623809814453125 fromCache: false this: 1029510845 
V/GenericRequest﹕ Resource ready in 4542.90796 size: 2.18359375 fromCache: false this: 516458536 
V/GenericRequest﹕ Resource ready in 4171.866168 size: 3.8623809814453125 fromCache: false this: 634418527 
V/GenericRequest﹕ Resource ready in 4474.170752 size: 3.8623809814453125 fromCache: false this: 356666200 
V/GenericRequest﹕ Resource ready in 4496.104085 size: 2.18359375 fromCache: false this: 671303046 
V/GenericRequest﹕ Resource ready in 4814.625126999999 size: 2.18359375 fromCache: false this: 347417463 

Đã tự hỏi liệu có ai có thể cung cấp thông tin chi tiết về vấn đề này không. Có lẽ nó là thời gian cần để thay đổi kích thước để xem? Tôi đang sử dụng match_parent cho chiều rộng của chế độ xem và chiều cao cố định khoảng 200dp.

hình ảnh được nạp bằng

Glide.with(fragmentContext) 
      .load(imageUrl) 
      .centerCrop() 
      .placeholder(R.drawable.placeholder) 
      .into(viewHolder.productImage); 

XML

<ImageView 
     android:id="@+id/product_image" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/product_image_height" (208dp) 
     android:layout_gravity="top" 
     android:background="@color/placeholder_bg" 
     /> 

EDIT: Theo @VladimirMironov nhận xét. Tôi đã cập nhật với nhóm tăng lên và xóa các tải đang chờ xử lý khi chế độ xem được tái chế. Điều này dường như đã giúp một chút khi di chuyển nhanh. Việc cung cấp ghi đè hoặc không sử dụng "match_parent" cho chế độ xem có cung cấp bất kỳ lợi ích nào khi xem xét đo không? Vẫn có những trường hợp mà lượt xem sẽ không hiển thị trong gần 5 giây.

+3

Có hai điều bạn có thể thử cải thiện hiệu suất: 1. Hủy yêu cầu tải xuống trong 'RecyclerView.Adapter.onViewRecycled' (thông qua lệnh gọi' Glide.clear') 2. Tăng kích thước nhóm 'ViewHolder' thông qua 'recycler.getRecycledViewPool(). SetMaxRecycledViews (0, 2 * numColumns)' –

+0

@VladimirMironov thú vị không biết về những gì tôi sẽ cho nó một shot –

+0

@VladimirMironov tôi đã chỉnh sửa của tôi đăng với một số thông tin bổ sung –

Trả lời

0

Chuyển sang PercentFrameLayout giúp ích rất nhiều cho dự án của tôi với tốc độ di chuyển hình ảnh trong RecyclerView. (adapted from Bumptech's "Issues" section of their GitHub page)

<android.support.percent.PercentFrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/product_image_height" (208dp) 
    android:layout_gravity="top" 
    android:background="@color/placeholder_bg" 
    <ImageView 
     android:id="@+id/product_image" 
     app:layout_widthPercent="100%" 
    /> 
</android.support.percent.PercentFrameLayout> 

Sau đó, trong onBindViewHolder()

int srcHeight = getImageHeight();  // hopefully you know the image height & width 
int srcWidth = getImageWidth(); 

PercentFrameLayout.LayoutParams layoutParams = 
     (PercentFrameLayout.LayoutParams) viewHolder.productImage.getLayoutParams(); 
PercentLayoutHelper.PercentLayoutInfo layoutInfo = layoutParams.getPercentLayoutInfo(); 

if(srcHeight > 0) {  // being careful about potential divide by 0 errors 
    layoutInfo.aspectRatio = (float)srcWidth/(float)srcHeight; 
} else { 
    layoutInfo.aspectRatio = 1; 
} 

layoutParams.height = 0; 
viewHolder.productImage.setLayoutParams(layoutParams); 

Glide.with(fragmentContext) 
      .load(imageUrl) 
      .centerCrop() 
      .placeholder(R.drawable.placeholder) 
      .into(viewHolder.productImage); 

Cuối cùng, bạn cần phải thêm gói hỗ trợ cho PercentFrameLayout để phụ thuộc của bạn trong build.gradle(Module:app)

compile 'com.android.support:percent:23.1.1' 
Các vấn đề liên quan