http://developer.android.com/resources/tutorials/views/hello-gridview.html
在自定义图像适配器中,我直接从Internet加载图像并将其分配给imagevIEw.
在grIDvIEw中显示图像,并且每件事情都很好,但它不是有效的方式.
当我滚动grIDvIEw它一次又一次加载图像,这就是为什么grIDvIEw滚动非常慢
是否有缓存或一些有用的技术可以使它更快?
解决方法 创建一个返回Bitmap的全局静态方法.此方法将采用参数:context,imageUrl和imagename.在方法中:
>检查文件是否已存在于缓存中.如果是,返回位图
if(new file(context.getCacheDir(),imagename).exists()) return BitmapFactory.decodefile(new file(context.getCacheDir(),imagename).getPath());
>否则您必须从Web加载图像,并将其保存到缓存中:
image = BitmapFactory.decodeStream(httpClIEnt.fetchinputStream(imageUrl));总结fileOutputStream fos = null;try { fos = new fileOutputStream(new file(context.getCacheDir(),imagename));}//this should never happencatch(fileNotFoundException e) { if(Constants.LOGGING) Log.e(TAG,e.toString(),e);}//if the file Couldn't be savedif(!image.compress(Bitmap.CompressFormat.JPEG,100,fos)) { Log.e(TAG,"The image Could not be saved: " + imagename + " - " + imageUrl); image = BitmapFactory.decodeResource(context.getResources(),R.drawable.default_cached_image);}fos.flush();fos.close();return image;
预加载Vector< SoftReference< Bitmap>>使用上述方法在AsyncTask类中使用所有位图的对象,以及另一个包含imageUrls和imagenames的Map的List(以便在需要重新加载图像时进行访问),然后设置GrIDVIEw适配器.
我建议使用一组SoftReferences来减少使用的内存量.如果你有大量的位图,你可能会遇到内存问题.
所以在你的getVIEw方法中,你可能有类似的东西(其中图标是Vector持有类型SoftReference< Bitmap>:
myImageVIEw.setimageBitmap(icons.get(position).get());
你需要做一个检查:
if(icons.get(position).get() == null) { myImageVIEw.setimageBitmap(defaultBitmap); new ReloadImageTask(context).execute(position);}
在ReloadImageTask AsyncTask类中,只需使用正确的参数调用从上面创建的全局方法,然后在onPostExecute中调用notifyDataSetChanged
可能需要完成一些额外的工作,以确保在已经为特定项目运行时不启动此AsyncTask
fileOutputStream fos = null;try { fos = new fileOutputStream(new file(context.getCacheDir(),R.drawable.default_cached_image);}fos.flush();fos.close();return image;myImageVIEw.setimageBitmap(icons.get(position).get());if(icons.get(position).get() == null) { myImageVIEw.setimageBitmap(defaultBitmap); new ReloadImageTask(context).execute(position);}
以上是内存溢出为你收集整理的android – 如何有效地加载gridview中的互联网图像?全部内容,希望文章能够帮你解决android – 如何有效地加载gridview中的互联网图像?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)