2016-10-09 3 views
1

나는 뉴스 피드를 관리하는 Recyclerview를 보유하고 있습니다. 많은 이미지가 있습니다. 안드로이드 모니터를 사용하면이 목록에서 스크롤 할 때 할당 된 메모리가 항상 증가합니다! 그래서 나는 (내 어댑터에서)이 2 재정의 방법에 추가 :Android : 글라이드를 어댑터 (RecyclerView)에서 수동으로 지우는 것이 좋습니다.

@Override 
public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { 
    super.onViewDetachedFromWindow(holder); 
    clearAdapter(holder); 
} 

@Override 
public void onViewRecycled(RecyclerView.ViewHolder holder) { 
    super.onViewRecycled(holder); 
    clearAdapter(holder); 
} 

protected void clearAdapter(RecyclerView.ViewHolder holder) { 
    Glide.clear(holder.mImageView); 
    ... 
} 

결과는 메모리 할당에 대한 더 나은 (그러나 완벽하지를!). 그리고 지금은 새로운 문제가 있습니다. 때로는 일부 이미지가 내 뉴스 피드에로드되지 않기 때문에 (완전히 무작위입니다!)

도움 주셔서 감사합니다!

답변

5

onViewRecycled에서 전화를 거는 것이 좋습니다. 재활용 된 뷰 풀에서 많은 뷰를 가지고 있다면 메모리를 절약하고 Bitmap 재사용 성을 향상시킬 수 있습니다.

그러나 onViewDetachedFromWindow에 전화를 거는 것은 아마도 좋지 않습니다. 뷰를 분리 한 다음 다시 바인딩하지 않고 다시 연결할 수 있습니다. 이 경우 뷰가 비어있는 것처럼 보일 수 있습니다.

clearAdapter에 대한 전화를 onViewDetachedFromWindow으로 제거하고 도움이되는지 확인해보십시오.

+0

'onViewDetachedFromWindow'에서보기를 지우는 것은 안전하지 않습니다. 소유자가 이미 재활용되지 않은 경우 다시 바인드되지 않을 수도 있기 때문입니다. –

관련 문제