3

이미지로드 및 캐싱 및 이미지 요청 관리를 위해 Github에서 많이 사용되는 이미지 로더가 많이 있습니다. 이미지 뷰 더 이상 창으로 요청을 (장착 된 경우, 만약 내가 요구 사항을 가로 질러 오지 진행중인 이미지 요청 Android 취소 - 이미지 로더 Volley, Picasso

  1. 범용 이미지 로더
  2. 발리
  3. Picasso
  4. 프레스코 (enhancement 추가) 배치 및 항공편) 취소됩니다.

    그러나 및리스트 뷰 GRIDVIEW이미지 뷰 자주 부착 윈도우로부터 분리 등 큐 요청이 각각 상쇄 것처럼 스크롤링 위젯.

    위의 모든 라이브러리에서 이미지 요청의 진행 상황을 추적 할 수있는 메커니즘이 없다는 사실을 염두에 두어야합니다. 이미지 뷰이 분리 된 경우 바이트 스트림이 이미 완료된 경우 요청을 진행 기준에 따라 취소해야합니다. 다음 작업의 여기

    입니다 .. 일반적으로 사용자가 항상 목록보기같은 스크롤 위젯에 GRIDVIEW 등을 많이 스크롤 차례로, 네트워크 대역폭을 절감하고 네트워크 호출을 줄 것이다, 취소 할 수 없습니다한다 발리에 대한 나의 이해 :

    private void cancelExistingRequest(Object target) { 
    
        checkMain(); 
        Action action = targetToAction.remove(target); 
        if (action != null) { 
    
         action.cancel(); 
         dispatcher.dispatchCancel(action); 
        } 
        if (target instanceof ImageView) { 
    
         ImageView targetImageView = (ImageView) target; 
         DeferredRequestCreator deferredRequestCreator = targetToDeferredRequestCreator.remove(targetImageView); 
         if (deferredRequestCreator != null) { 
    
          deferredRequestCreator.cancel(); 
         } 
        } 
    } 
    

    여기 범용 이미지 로더에 대한 이해입니다 :

    public boolean removeContainerAndCancelIfNecessary(ImageContainer container) { /* logic to check progress of Request */ mContainers.remove(container); if (mContainers.size() == 0) { mRequest.cancel(); return true; } return false; } 

    여기 피카소와 나의 이해이다 내가 인라인 요청을 취소하는 허가 범용 이미지 로더를 파악하지 않았다.

    void cancelDisplayTaskFor(ImageAware imageAware) { 
    
        cacheKeysForImageAwares.remove(imageAware.getId()); 
    } 
    

    나 네트워크 요청 만 그것을 해결 할 수있는 가능성을 알려 주시기 바랍니다. 이미지가 이미 캐시 된 경우 요청을 취소합니다.

    배터리 성능이 내가 발리 피카소에 대해 말할 수 없다 안드로이드

+0

요청을 취소하거나 60 %까지 요청을 캐시하는 대신 인터넷 사용량이 줄어들어 요청을 취소하고 다시 갓 필요가있을 때 같은 이미지를 얻으려면 AndroidQuery를 사용해보세요. 이 3 개의 라이브러리 대신 비동기 이미지 로딩 : http : //code.google.com/p/android-query/ –

+0

캐시 된 이미지가 아닌 네트워크 호출에 대한 요청입니다. –

+0

네, 그렇지만 캐쉬 이미지가 아니라면 매번 net에서 로딩 될 것이고 이미지 요청이 75 % 바이트 데이터를 얻지 못하면 낭비 할 것이므로 간접적으로 네트워크 사용에 낭비가 될 것입니다. –

답변

2

정말 중요하지만 내가 어떻게 UIL 작품을 말할 수있다.

UIL은 작업 처리 중에 ImageView를 계속 확인합니다. 작업이 실제가 아닌 경우 (ImageView가 재활용 (재사용)되거나 GC로 수집 된 경우) UIL은이 ImageView에 대한 작업을 중지합니다.

이미지를 다운로드하는 동안 작업이 실제 데이터가되지 않으면 어떨까요? 이미지 데이터의 75 % 미만이 다운로드 된 경우 UIL은 다운로드를 중단합니다. 75 % 이상인 경우 UIL은 다운로드를 완료하고 (즉, 디스크 캐시의 UIL 캐시 이미지 파일) 작업을 취소합니다.

+0

안녕하세요 노스트라, 라이브러리의 진행 상태를 계속 확인하는 코드 또는 파일 이름 부분을 게시 해 주실 수 있습니까? 나는 그것을 살펴볼 것이다 –

+0

'IoUtils.copyStream (...)' – NOSTRA

관련 문제