作者ilay (说唱猜做玩)
看板AndroidDev
标题Re: [分享] 在ListView显示网路图片+快取
时间Tue Oct 29 18:56:36 2013
不好意思把这篇文又挖出来,
请问一下,我把原po的project给run起来之後很ok没什麽问题
但是改放在 fragment 里面而不是 activity
整个画面滑动变超卡的,怎麽会这样?
※ 引述《givemepass (〆)》之铭言:
: 43
: badhabit大的程式看了让人真是感觉舒服
: 无论变数名称 编码风格跟习惯 我觉得很漂亮
: 看了这篇真的让我对ListView有更深刻的感受
: 而这篇刚好小弟之前有研究过从网路下载图片的议题
: 之前朋友问我怎麽从网路下载超大图片
: 我找了蛮久的资料 後来终於让我找到解决的写法
: 现在分享给大家
: 一般来说 网路快慢会影响取得图片的速度
: 而android对於存取网路资源这方面有5秒的限制
: 在小弟之前的文章有翻译过一篇 里面也有提到相关的议题
: 测试了一下badhabit大的程式 似乎没有做相关的预防
: 例如跑高解度的图片 会出现当机的状况
: 例如这张 http://ppt.cc/;fh~ 2.85mb 应该够大了:P
: 就会跳出这样的画面
: http://uploadingit.com/file/m4oqyvohae9cqfx1/DownloadImageFail.png
: 因此小弟擅自改了一下badhabit大的程式 可以正常的跑
: http://uploadingit.com/file/5db08oskidpcjeqo/downloadImageSuccess.png
: 整体程式没有变动多少 希望badhabit大不要见怪
: 首先我改了原本程式main.java的部分 第八行
: GetWebImg ImgCache = new GetWebImg(this);
: 因为我下载图片的时候 需要Context
: 再来是GetWebImg.java的部分
: 小弟修改的部分有
: 加了建构子
: public GetWebImg(Context c){
: con = c;
: }
: 改了LoadUrlPic 函式
: public synchronized Bitmap LoadUrlPic(Context c, String url) {
: URL imgUrl;
: Bitmap defaultImg = BitmapFactory.decodeResource(con.getResources(),
: wu.listview.webimg.R.drawable.icon);
: Bitmap webImg = null;
: try {
: imgUrl = new URL(url);
: }
: catch (MalformedURLException e) {
: Log.d("MalformedURLException",e.toString());
: return defaultImg;//抓不到网路图时, 读预设图片
: }
: try {
: HttpURLConnection httpURLConnection =
: (HttpURLConnection) imgUrl.openConnection();
: httpURLConnection.setDoInput(true);
: httpURLConnection.setDoOutput(false);
: httpURLConnection.setUseCaches(false);
: httpURLConnection.connect();
: InputStream inputStream = httpURLConnection.getInputStream();
: int length = (int) httpURLConnection.getContentLength();
: int tmpLength = 512;
: int readLen = 0,desPos = 0;
: byte[] img = new byte[length];
: byte[] tmp = new byte[tmpLength];
: if (length != -1) {
: while ((readLen = inputStream.read(tmp)) > 0) {
: System.arraycopy(tmp, 0, img, desPos, readLen);
: desPos += readLen;
: }
: webImg = BitmapFactory.decodeByteArray(img, 0,img.length);
: }
: httpURLConnection.disconnect();
: }
: catch (IOException e) {
: Log.d("IOException",e.toString());
: return defaultImg; //抓不到网路图时, 读预设图片
: }
: return webImg;
: }
: 这样一来 无论多大的图片下载 它都不会当掉了
: 除非网站挂了 就使用预设的图片
: 附上改过的程式码
: http://uploadingit.com/file/ylhjk0osugues8th/ListView_WebImg_update.zip
: 如果有观念不正确或者更好的写法 请告知小弟 避免误导大家 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.40.167.55
1F:推 givemepass:你这样讲我不知道怎麽帮你XD 10/30 13:28
2F:→ ilay:这样说好了 我把您的code加到我的project里後 10/30 15:51
3F:→ ilay:图片载入正常 但是会经常性的无法滑动 listview 10/30 15:51
4F:→ ilay:就是卡很久的感觉 然後又突然可以滑 10/30 15:52
5F:→ ilay:目前是摸不着头绪该从哪些方向着手 10/30 15:52
6F:→ ilay:因为看logcat也看不出什麽迹象... 10/30 15:52
7F:→ ilay:或许和 fragment 没什麽关系 10/30 15:55
8F:→ ilay:只是因为我的 listview 是放在 fragment 里面所以提一下 10/30 15:56
9F:→ ilay:感谢您:) 10/30 15:56
10F:→ ilay:稍微观察一下 如果没看错的话 似乎每次拉动 listview 时 10/30 16:54
11F:→ ilay:都会触发下载@@ 10/30 16:54
12F:→ KeySabre:main thread卡住要检查什麽? 10/30 18:00
13F:→ KeySabre:你又检查过哪些? 10/30 18:01
14F:推 tac0wu:为什麽不用现成Library就好了? 10/30 20:19
16F:→ ilay:太感激了 来玩看看! 10/30 20:30