7

我正在使用 UrlImageViewHelper 来在适配器视图中加载图片。

我的适配器是:


@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
  • 时间: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
  • 时间:119

大多在 1.5 秒以上。用户需要一个一个滚动项目才能看到图片

在 android 4.3 关系 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 毫秒,列表可用

4

2 回答 2

2

这与手机上运行的操作系统无关。可能的原因和最可能的原因是设备上其他应用程序正在消耗的 RAM 内存量。出于测试目的,请尝试在运行应用程序不多的新设备上运行相同的代码。

于 2013-08-16T11:00:07.373 回答
1

(我不希望这个答案能获得赏金)
UrlImageViewHelper 使用 HttpURLConnection 对提供图像的 Web 服务器进行 http 调用。我们已经使用了 HttpURLConnection(并尝试了大多数其他类来进行 http 获取),我们发现它是通常不稳定的类(例如 org.apache.http 等)中最不不稳定的(特别是在 Android 2.3 上)。有一次,我在我们的网络服务器上使用了协议分析器(tcpdump 或 tshark),发现 ACK 没有及时返回,我想(这是一年多前的事了)我发现或多或少是一样的WiFi和蜂窝数据(t-mobile GSM)。我得出的结论是这些课程中存在低级问题,可能是 Dalvik 本身的问题。同样,我不希望这个答案得到赏金,我没有试图证明我的断言,我只是在讲述我在调查类似问题时的进展情况。

于 2013-08-09T16:03:20.830 回答