2013-08-07 15 views
7

私はUrlImageViewHelperを使用して、アダプタビューで画像をロードしています。アンドロイド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 1で

私は呼び出しをプロファイルしようとしましたが、私は非常に長い呼び出しの間に、それがソケットinputstreamの読み取りをハングすると思います。

2つのプラットフォーム間でパフォーマンスにこのような違いがある理由を知りたい人は誰ですか?


Logcat出力:

アンドロイド4.1(100ミリ秒下タイミングは通常複製です)。2ギャラクシーSIIIミニ

  • 時間:3217
  • 時間:4782
  • 時間:124
  • 時間:56
  • 時間:168
  • 時間:84
  • 時間:102
  • 時間:2819
  • 時間: 2703
  • 時間:154
  • 時間:2468
  • 時間:81
  • 時間:40
  • 時間:52
  • 時間:2495
  • 時間:37
  • 時間:2007
  • 時間:58
  • 時間:38
  • 時間:119
  • 時間:80
  • 時間:44
  • 時間:2419
  • 時間:1651
  • 時間:40
  • 時間:2766
  • 時間:90
  • 時間:1889
  • 時間:183
  • 時間:2515
  • 時間:58
  • 時間:3345
  • 時間:2661
  • 時間:81
  • 時間:2434
  • 時間:ほとんどが1.5秒以上の119

。ユーザーは画像を1つずつスクロールして画像を表示する必要があります。

アンドロイド43つのネクサス4:

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

一貫して500ミリ秒の下で、リストは

+0

おそらく、getViewメソッド内でUrlImageViewCallbackを割り当てて、それを遅くすると、同じインスタンスを繰り返し渡すことができますか? –

+0

アダプタのgetviewメソッドで費やされた時間は、一貫して5ミリ秒以下です。コールバック全体を削除すると、同じ結果が表示されます。 (1つは非常に遅く、もう1つは速い)。コールバックが問題の原因だとは思わない。 – alaeri

+0

これは単なるダウンロード時間ではないことは確かですか?どのくらいのファイルがありますか?後者の値はキャッシュからロードされている可能性が高いことを示します。 – koush

答えて

2

これは、電話で動作しているOSとは関係ありません。考えられる理由と最も可能性が高いのは、デバイス上の他のアプリケーションによって消費されているRAMメモリの量です。テスト目的のために、多くのアプリを実行していない新しいデバイスで同じコードを実行してみてください。

+0

私は、htcデバイスを4.2にアップデートしてすべてがスピードアップする前のケースだと信じていました。アプリに割り当てられたRAMの量がhtc 1の4.1から4.2に増加しない限り。私はもうチェックするためのデバイスを持っていない。 – alaeri

+0

私はあなたに恩恵を授与しています。それは1つのupvoteを持っており、これはまだ最も可能性の高い原因です。それでも、htc 1のアップグレード後に変更された理由はわかりません。 – alaeri

+0

それは種.. .. :) –

1


UrlImageViewHelperはへのHttpURLConnectionを使用しています(私はこの答えは恵みを取ることを期待していない)使用可能ですイメージを処理するWebサーバーへのhttp呼び出しを行います。私たちはHttpURLConnectionを使用しています(他のほとんどのクラスでhttpを取得しようとしました)、一般的に不安定なクラス(例えば、org.apache.httpなど)の中で最も薄れていると感じました。ある時点で、私はWebサーバ上でプロトコルアナライザ(tcpdumpまたはtshark)を使用し、ACKが適時に戻ってこないことを発見しました。(これは1年以上前です)私は多かれ少なかれ同じWiFi上のものとセルデータ(t-mobile GSM)。私はこれらのクラスには低レベルの問題があると結論付けました。おそらくDalvik自体の問題です。また、私はこの回答が恩恵を受けるとは思っていません。私は自分の主張を証明しようとしていません。

+0

HttpURLConnectionに関連するもののためのstackoverflowを – tallen

+0

私はUrlImageViewHelperを置き換えるためにピカソを使用しようとしましたが、私は同じ動作をしました:(Picassoはokhttpを使用します。それは同じ低レベルの問題の影響を受けているが確かではない場合 – alaeri

+0

[この質問](http://stackoverflow.com/questions/14717752/httpurlconnection-very-slow?lq=1)同じ問題がある可能性がありますしかし、誰も答えませんでした:(私は他の答えに賞金を与えましたが、あなたの助けに感謝したいと思います。私は来週、test resulで質問を更新しようとしますts。 – alaeri

関連する問題