利用LruCache為GridView非同步載入大量網路圖片完整示例
轉載:http://blog.csdn.net/lfdfhl/article/details/18350601
=============================================
MainActivity如下:
- package cc.testlrucache;
- import android.os.Bundle;
- import android.widget.GridView;
- import android.app.Activity;
- /**
- * Demo描述:
-
* 在GridView中採用LruCache非同步載入大量圖片,避免OOM
- *
- * 學習資料:
- * http://blog.csdn.net/guolin_blog/article/details/9526203
- * Thank you very much
- */
- publicclass MainActivity extends Activity {
- private GridView mGridView;
- private GridViewAdapter mGridViewAdapter;
- @Override
-
protectedvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- privatevoid init(){
- mGridView = (GridView) findViewById(R.id.gridView);
- mGridViewAdapter = new GridViewAdapter(this, 0, ImagesUrl.Urls, mGridView);
-
mGridView.setAdapter(mGridViewAdapter);
- }
- //取消所有的下載任務
- @Override
- protectedvoid onDestroy() {
- super.onDestroy();
- mGridViewAdapter.cancelAllTasks();
- }
- }
GridViewAdapter如下:
- package cc.testlrucache;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.HashSet;
- import android.annotation.SuppressLint;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.AsyncTask;
- import android.support.v4.util.LruCache;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.AbsListView.OnScrollListener;
- import android.widget.ArrayAdapter;
- import android.widget.GridView;
- import android.widget.ImageView;
- /**
- * LruCache的流程分析:
- * 我們從第一次進入應用的情況下開始
- * 1 依據圖片的Url從LruCache快取中取圖片.
- * 若圖片存在快取中,則顯示該圖片;否則顯示預設圖片
- * 2 因為是第一次進入該介面所以會執行:
- * loadBitmaps(firstVisibleItem, visibleItemCount);
- * 我們從loadBitmaps()方法作為切入點,繼續往下梳理
- * 3 嘗試從LruCache快取中取圖片.如果在顯示即可,否則進入4
- * 4 開啟一個非同步任務下載圖片.下載完成後顯示圖片,並且將
- * 該圖片存入LruCache快取中
- *
- * 在停止滑動時,會呼叫loadBitmaps(firstVisibleItem, visibleItemCount)
- * 情況與上類似
- */
- @SuppressLint("NewApi")
- publicclass GridViewAdapter extends ArrayAdapter<String> {
- private GridView mGridView;
- //圖片快取類
- private LruCache<String, Bitmap> mLruCache;
- //記錄所有正在下載或等待下載的任務
- private HashSet<DownloadBitmapAsyncTask> mDownloadBitmapAsyncTaskHashSet;
- //GridView中可見的第一張圖片的下標
- privateint mFirstVisibleItem;
- //GridView中可見的圖片的數量
- privateint mVisibleItemCount;
- //記錄是否是第一次進入該介面
- privateboolean isFirstEnterThisActivity = true;
- public GridViewAdapter(Context context, int textViewResourceId,String[] objects, GridView gridView) {
- super(context, textViewResourceId, objects);
- mGridView = gridView;
- mGridView.setOnScrollListener(new ScrollListenerImpl());
- mDownloadBitmapAsyncTaskHashSet = new HashSet<DownloadBitmapAsyncTask>();
- // 獲取應用程式最大可用記憶體
- int maxMemory = (int) Runtime.getRuntime().maxMemory();
- // 設定圖片快取大小為maxMemory的1/6
- int cacheSize = maxMemory/6;
- mLruCache = new LruCache<String, Bitmap>(cacheSize) {
- @Override
- protectedint sizeOf(String key, Bitmap bitmap) {
- return bitmap.getByteCount();
- }
- };
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- String url = getItem(position);
- View view;
- if (convertView == null) {
- view = LayoutInflater.from(getContext()).inflate(R.layout.gridview_item, null);
- } else {
- view = convertView;
- }
- ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
- //為該ImageView設定一個Tag,防止圖片錯位
- imageView.setTag(url);
- //為該ImageView設定顯示的圖片
- setImageForImageView(url, imageView);
-
相關推薦
利用LruCache為GridView非同步載入大量網路圖片完整示例
轉載:http://blog.csdn.net/lfdfhl/article/details/18350601 ============================================= MainActivity如下: packa
Android通過AsyncTask與ThreadPool(執行緒池)兩種方式非同步載入大量資料的分析與對比
如果您認為本部落格不錯,讀後覺得有收穫,不妨打賞讚助我一下,讓我有動力繼續寫出高質量的部落格。 贈人玫瑰,手有餘香。分享技術,傳遞快樂。 有心課堂,傳遞的不僅僅是技術! QQ交流群:250468947 有心課堂會員,請加入VIP QQ交流
使用select2分批非同步載入大量資料
//select2選項 var select2Conf = {"allowClear":allowClear,width:"100%"}; //select2使用data list
【安卓筆記】非同步載入大量圖片
package cn.edu.chd.utils; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; /** * @author Row
GridView非同步載入本地圖片縮圖
main.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" and
ListView與GridView非同步載入圖片
原理很簡單,主要是用到了回撥方法,下面是非同步載入圖片的類 <span style="font-size:16px;">package com.xxx.xxx; import java.io.InputStream; import java.lang.ref.So
使用開源imageLoader優化listview載入大量本地圖片的demo
package com.example.listviewdemo; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.uti
Android經典面試問題:請你設計一套圖片非同步載入快取方案——圖片的三級快取
友情提示:文章最後附有專案原始碼現在,Android有很多優秀的圖片載入框架。例如:Picasso,Glide,Fresco。我們幾乎只要簡單呼叫幾句程式碼就可以很好的實現圖片的載入。很多時候也不需要我們親自去寫圖片載入方案。但是,學習圖片的三級快取策略無論是在面試時,還是對
吐血中, 呼叫分享到微信好友,載入的網路圖片顯示不出來,微信分享,自定義分享標題、內容描述關鍵詞限制(紅包)
太坑爹了,嘗試吐血後,總結一番,這種問題,讓我從何說說起啊!!!!!!!分享後,自己能看到,自己分享的連結圖片,被分享人竟然看不到圖片!!原因何在我分享到對方微信好友,截圖展示:對方截圖展示:竟然是自定義title中,和content中,存在『紅包』兩個字的字眼,逼瘋了,去掉
[Android]Html.from()中ImageGetter非同步載入並顯示圖片和替換標籤處理效果
非同步載入圖片:先返回一個LevelListDrawable,之後載入圖片,獲取到Bitmap之後轉為Drawable,並設定到之前的LevelListDrawable中,更新level。這裡要注意,要重新設定一下Textview的text,不然圖片顯示不出來。 publ
GridView實現載入本地所有圖片
public class MainActivity extends Activity {private GridView gridView;// 獲取所有圖片的路徑List<String> imagePath = new ArrayList<String&
Android開發網路圖片完整顯示且不拉伸
需求:由上往下載入多張網路圖片,滿橫屏完整顯示且不拉伸。 這裡有幾個問題要解決的,一個是網路圖片,一個是完整顯示,一個是圖片不能出現拉伸問題。 解決思路:不拉伸完整顯示只有等比例縮放圖片,ImageView.ScaleType.CENTE
使用AsyncTask非同步更新UI介面(載入網路圖片)
寫這個部落格時抽抽了,順便又用了一些WebView的東西,更多webview參見這裡 1.簡單介紹下AsyncTask AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以
iOS 非同步載入網路圖片,獲取圖片真實尺寸
專案需求: 在網路上載入一組圖片的資料,並且這組圖片要按照比例展示出來 做法分析: (1)首頁介面上要是使用的圖片控制元件的建立,這裡的高度是用設定的高度,這部分需要在主執行緒完成; (2)第二部部分是獲取圖片的實際尺寸,這部分線上程中完成; (3)然後需要在主執行緒重新整
IOS開發之非同步載入網路圖片並快取本地實現瀑布流(一)
</pre><pre name="code" class="objc"></pre><pre name="code" class="objc">在前面的一篇部落格中,我寫了一個瀑布流照片牆的程式,由於之前的程式載入的圖片是本
Android批量圖片載入經典系列——使用xutil框架快取、非同步載入網路圖片
一、問題描述 為提高圖片載入的效率,需要對圖片的採用快取和非同步載入策略,編碼相對比較複雜,實際上有一些優秀的框架提供瞭解決方案,比如近期在git上比較活躍的xutil框架 Xutil框架提供了四大模組: 1、 DbUtil模組:採用ORM機制簡化Sqlite操作,
Android批量圖片載入經典系列——採用二級快取、非同步載入網路圖片
public class AsyncImageLoader{ private MemoryCache mMemoryCache;//記憶體快取 private FileCache mFileCache;//檔案快取 private ExecutorService mExecu
Android 非同步載入圖片-LruCache和SD卡或手機快取-三級快取原理載入圖片
非同步載入圖片的例子,網上也比較多,大部分用了HashMap<String, SoftReference<Drawable>> imageCache ,但是現在已經不再推薦使用這種方式了,因為從 Android 2.3 (API Level 9)開始,垃圾回
網路請求httpurlconnection ,非同步載入 放入viewpage中
package com.bwei.viewpagedemo; import android.os.AsyncTask; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCo
iOS非同步載入網路圖片
在iOS中載入網路圖片有多種方式: 法1:在主執行緒中同步載入網路圖片 在主執行緒中載入圖片,先將圖片的URL存放進NSURL,然後再用這個NSURL初始化NSData,再把UIImage用NSData初始化,就行了。程式碼如下: - (UITableViewCell *