2013-08-07 15 views
7

我使用UrlImageViewHelper爲了在適配器視圖中加載圖片。什麼可以使加載緩慢的android 4.1.X而不是4.2?

我的適配器是:


@Override 
public View getView(int position, View convertView, ViewGroup parent) {    
    if(convertView==null){ 
     convertView=new SquaredImageView(getContext()); 
    } 
    SquaredImageView view= (SquaredImageView) convertView; 
    final long time=System.currentTimeMillis(); 
    UrlImageViewHelper.setUrlDrawable(view,getItem(position).getLook_picture(), 
      R.drawable.placeholder_bkp, -1,new UrlImageViewCallback() { 
        @Override 
        public void onLoaded(ImageView imageView, Bitmap loadedBitmap, 
               String url, boolean loadedFromCache) { 
         Log.d(TAG,"time : "+ (System.currentTimeMillis()-time)); 
        } 
    }); 
    return view; 
} 

我下載並顯示在全寬列表大畫面(620x620 JPG)。第一次下載/顯示時速度很慢。升級到android 4.2後,這個問題不再發生。在HTC上。

我試圖分析這些調用,我相信在非常長的調用期間,它會掛起讀取套接字輸入流。

有沒有人有線索,爲什麼兩個平臺之間的性能差距如此之大?


logcat的輸出:(在100毫秒定時通常複製

機器人4.1。2銀河SIII迷你

  • 時間:3217
  • 時間:4782
  • 時間:124
  • 時間:56
  • 時間:168
  • 時間:84
  • 時間:102
  • time:2819
  • time: 2703
  • 時間:154
  • 時間:2468
  • 時間:81
  • 時間:40
  • 時間:52
  • 時間:2495
  • 時間:37
  • 時間:2007年
  • time:58
  • time:38
  • 時間:119
  • 時間:80
  • 時間:44
  • 時間:2419
  • 時間:1651
  • 時間:40
  • 時間:2766
  • 時間:90
  • 時間:1889年
  • 時間:183
  • 時間:2515
  • 時間:58
  • 時間:3345
  • 時間:2661
  • 時間:81
  • 時間:2434
  • 時間:119

大多以上1.5秒。用戶需要逐個滾動項目才能看到圖片

On android 4。3個關係4:

  • 時間:47
  • 時間:1111
  • 時間:154
  • 時間:46
  • 時間:124
  • 時間:115
  • 時間:150
  • time:201
  • time:332
  • 時間:366
  • 時間:450
  • 時間:82
  • 時間:167
  • 時間:81
  • 時間:150
  • 時間:224
  • 時間:224
  • time:143
  • time:185
  • 時間:66
  • 時間:183
  • 時間:66
  • 時間:218
  • 時間:98
  • 時間:169
  • 時間:49
  • 時間:148
  • 時間:65
  • time:64
  • time:60
  • 時間:169
  • 時間:51

始終低於500毫秒,列表可用

+0

也許在getView方法中分配UrlImageViewCallback會降低速度,您是否可以一次又一次地將它傳遞給同一個實例? –

+0

在適配器的getview方法中花費的時間始終低於5毫秒。如果我刪除整個回調,我看到相同的結果。 (一個很慢,另一個很快)。我不認爲回調是問題的原因。 – alaeri

+0

你確定這不僅僅是下載時間?這些文件有多大?後一組數值表示它們可能正從緩存中加載。 – koush

回答

2

這與手機上運行的操作系統無關。可能的原因和最可能的原因是設備上其他應用程序正在使用的RAM內存量。出於測試目的,請嘗試在運行程序不多的新設備上運行相同的代碼。

+0

我認爲是這樣的情況下,我們更新了一個htc一個設備到4.2和一切加快。除非分配給應用程序的ram數量在htc之一上增加了4.1和4.2之間。我沒有該設備了。 – alaeri

+0

我給你賞金。它有一個upvote,這仍然是最可能的原因。儘管如此,我不明白爲什麼它在升級後會改變。 – alaeri

+0

That's kind .. :) –

1

(我不希望這個答案拿賞金)
UrlImageViewHelper使用HttpURLConnection類來使http調用服務於圖像的Web服務器。我們使用HttpURLConnection(並且嘗試了大部分其他類來完成http獲取),我們發現它是通常片狀的類(例如org.apache.http stuff等)中最不片的(特別是在Android 2.3上)。有一次,我在我們的網絡服務器上使用了一個協議分析器(tcpdump或tshark),發現ACK並沒有及時回覆,我想(這是一年前)我發現或多或少一樣WiFi和小區數據(t-mobile GSM)。我認爲這些課程中存在低水平的問題,也許Dalvik本身存在問題。再次,我不希望這個答案能夠獲得賞金,我也沒有試圖證明我的斷言,我只是在敘述我在調查中得到了多大程度的類似問題。

+0

搜索與HTTP請求相關的東西stackoverflow – tallen

+0

我試圖用畢加索來代替UrlImageViewHelper,我有同樣的行爲:(畢加索使用okhttp庫,它可能是它是受同樣的低級別問題影響,但它不確定 – alaeri

+0

[這個問題](http://stackoverflow.com/questions/14717752/httpurlconnection-very-slow?lq=1)可能會有同樣的問題但沒有人回答:(我已經授予了其他答案的賞金,但我想感謝你的幫助。我將嘗試下週更新測試結果TS。 – alaeri