Java Drawable.createFromStream使用来自远程服务器的映像需要更长时间?

Java Drawable.createFromStream使用来自远程服务器的映像需要更长时间?,java,android,Java,Android,对于从远程web服务器请求的图像,Drawable.createFromStream似乎比本地服务器慢。这有意义吗 我有以下代码通过HTTP从android应用程序的web服务器获取图像 HttpClient httpclient = new DefaultHttpClient(); HttpParams httpparams = httpclient.getParams(); HttpConnectionParams.setConnectionTimeout(httpparams, CONNE

对于从远程web服务器请求的图像,Drawable.createFromStream似乎比本地服务器慢。这有意义吗

我有以下代码通过HTTP从android应用程序的web服务器获取图像

HttpClient httpclient = new DefaultHttpClient();
HttpParams httpparams = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpparams, CONNECT_TIMEOUT_MS);
HttpConnectionParams.setSoTimeout        (httpparams, CONNECT_TIMEOUT_MS);

// For test only
long time = System.currentTimeMillis();

HttpResponse response = httpclient.execute(new HttpGet(strUrl)); 
StatusLine statusLine = response.getStatusLine();

Log.w("getimage", "Time to get image was " + (System.currentTimeMillis() - time) + "ms");

// Check response
if(statusLine.getStatusCode() == HttpStatus.SC_OK) 
    {
    HttpEntity entity = response.getEntity();
    InputStream inputStream = entity.getContent();

    Log.w("getimage", "This is how many bytes we skipped: " + inputStream.skip(1000000));

    image = Drawable.createFromStream(inputStream, "src name");
}

Log.w("getimage", "Time to return from image call was " + (System.currentTimeMillis()-time) + "ms");
如果我指向我的本地站点(本地网络),第一个计时器日志是30ms(HTTP请求),第二个是66ms(HTTP请求,加上可绘制对象)

如果我做同样的事情,但指向我的web服务器,我会得到298ms(预计会慢一些…),但是对于HTTP请求和drawable对象调用,会得到1800ms

这告诉我Drawable.createFromStream方法在远程web服务器上花费的时间长了惊人的1.5秒


有什么想法吗?它正在执行任何HTTP调用吗?文档很少。在本地运行时,一切都很顺利,但在远程运行时速度非常慢…

我想是因为网络传输时间太长了。对此我无能为力,所以我不是串行地获取每个图像,而是对每个图像使用一个线程(最多5个图像),并并行地获取它们

类似于

m_threadLatch = new CountDownLatch(m_story.photos_thumb.length);
for(int i=0; i<m_story.photos_thumb.length; i++)
    {
    new HTTPGetImages(((MyApplication)getApplication()).getBaseURL() + m_story.photos_thumb[i]).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }
new AddImagesToUI().execute();
m_threadlack=新的倒计时锁存器(m_story.photos\u thumb.length);

对于(int i=0;我不确定HttpClient返回哪种类型的InputStream,但您是否尝试过将响应InputStream封装在BufferedInputStream中?感谢您的建议!不幸的是,这似乎没有多大区别。就像createFromStream调用正在通过线路执行某些操作……然后可能尝试读取输入all立即自己动手。然后将其传递给绘图设备。有关一些示例,请参见