我的网络连接非常快。尽管我的图像在应用程序中加载速度非常慢。这是我一直在使用的代码。正如所建议的那样,我一直在使用异步方法单独执行某些任务。
public class ItemPage extends Activity{
ImageView image;
String url;
@Override
protected void onCreate(Bundle savedInstanceState) {
image = (ImageView) findViewById(R.id.img);
//getting url from the parent activity
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if(extras != null) url = extras.getString("bigurl");
//async call
new DownloadFilesTask().execute();
}
private class DownloadFilesTask extends AsyncTask<Void, Void, Void> { //working part
Drawable drawable;
@Override
protected Void doInBackground(Void... params) {
try {
drawable =drawableFromUrl(url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
image.setImageDrawable(drawable);
}
}
public static Drawable drawableFromUrl(String url) throws IOException {
Bitmap x;
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.connect();
InputStream input = connection.getInputStream();
x = BitmapFactory.decodeStream(input);
return new BitmapDrawable(x);
}
}
请帮帮我。有没有办法从网址加载图像更快?提前感谢您的时间。
答案 0 :(得分:0)
My internet connection is very fast. Despite that my image loads very slow in the app.
这并不意味着您可以在连接速度非常快的情况下快速下载图像,可能是Web服务器对每个连接都有限制下载速度,或者服务器远离您当前的位置。我建议首先检查你尝试连接的服务器的下载速度,如果它很慢,那么它不是代码而是服务器本身。
答案 1 :(得分:0)
这适合我。
Bitmap mIcon_val;
URL newurl;
private void loadImage() {
Thread backgroundThread = new Thread() {
@Override
public void run() {
// do second step
try {
newurl = new URL(image_url);
mIcon_val = BitmapFactory.decodeStream(newurl
.openConnection().getInputStream());
} catch (MalformedURLException e) {
} catch (IOException e) {
}
Message msg = Message.obtain();
msg.what = 123;
handler.sendMessage(msg);
}
};
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 123:
imageView.setImageBitmap(mIcon_val);
break;
}
}
};
要调用线程,可以使用
backgroundThread.start();
答案 2 :(得分:0)
您可以尝试使用picasso library.it有几个功能来压缩,裁剪可能有助于以更好的速率下载图像的图像。该链接提供了图书馆使用的完整文档 - http://square.github.io/picasso/
答案 3 :(得分:0)
我想你想使用Aquery Library。 它是非常快速的加载图像。
参考此link
答案 4 :(得分:0)
您可以采取以下措施来加速图像处理方面的工作。
解码流时,您将其转换为内存中的栅格格式。 500x500的32位图像将占用1 MB的内存(500x500x4bytes)。原生像素格式因设备而异,最快的性能是将位图的像素格式与系统的像素格式相匹配,因此系统无需将图像从原始格式转换为窗口格式。
特别是旧设备将使用16位格式。图像将以32位存储,然后在绘制到屏幕时转换为16位。在这些设备上,您可以节省一半的内存存储,并通过以16位而不是32位解码图像来避免代价高昂的像素转换。在具有内存的较新设备上,最好将图像存储在32位以避免转换损失。
所以早些时候,存储系统使用的像素格式。它将是16位格式(RGB_565)或32位格式(每种颜色每像素8位)
// default to 32 bits per pixel
Config bitmapConfig = Bitmap.Config.ARGB_8888 ; //RGB_565 | ARGB_8888
WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
int bmp_cfg = wm.getDefaultDisplay().getPixelFormat();
if (bmp_cfg == PixelFormat.RGBA_8888 || bmp_cfg == PixelFormat.RGBX_8888 || bmp_cfg == PixelFormat.RGB_888){
bitmapConfig = Bitmap.Config.ARGB_8888;
} else {
bitmapConfig = Bitmap.Config.RGB_565;
}
稍后,在解码位图时,使用窗口管理器的默认像素格式,以便在解码时创建具有正确像素格式的位图(而不是在第二遍中转换)
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = bitmapConfig; // match pixel format to widnow system's format
Bitmap bitmap = BitmapFactory.decodeStream(input, null, options);
bitmap = Bitmap.createBitmap(bitmap);
您也可以使用样本大小来调整位图,但是在500x500时,您可能还需要整个图像。