最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程使用緩存優(yōu)化ListView的方法

 更新時間:2015年12月30日 10:03:34   作者:傅榮康  
這篇文章主要介紹了Android編程使用緩存優(yōu)化ListView的方法,涉及ListView針對sd卡緩存及內存緩存的優(yōu)化技巧,需要的朋友可以參考下

本文實例講述了Android編程使用緩存優(yōu)化ListView的方法。分享給大家供大家參考,具體如下:

ListView調用Adapter的getView方法獲取每一個Item布局,將這些已經獲得的Item布局放入緩存,將大大提高獲取數據的效率,而且節(jié)省更多的流量,將數據進行緩存有兩種方法是,一種是將內存緩存一種是sd卡緩存,在此分別進行演示。

sd卡緩存:

sd卡緩存是將下載的數據保存到sd卡中,當再次要獲取數據時,首先要判斷sd卡中是否存在,如果存在的話,就直接讀取sd卡中的數據,如果不存在就從網上下載,然后保存到sd卡中

內存緩存:

內存優(yōu)化是將獲取到的數據存取到Map集合中,如果再次引用此數據,就直接從Map集合中獲取,這樣會導致一個問題,如果Map集合中的數據特別多,比如存取了100萬條數據,這樣有可能就會導致內存溢出。這是因為Map集合是強引用的集合,如何不把Map集合置為空的話,這個集合Java虛擬機就不會把它回收掉,當Map中的數據大小超過了內存大小就會導致內存溢出。為了避免這種異常我們要使用軟引用softreference ,軟引用和強引用的區(qū)別如下:

1. softreference 他是java虛擬機給我們提供的一個包裝類型.

在包裝類型里面的對象 一般情況下 ,java虛擬機會盡量長時間的保留這個對象
當java虛擬機內存不足的時候 java虛擬機就會回收 softreference里面的對象

2. hardreference 默認new出來的對象 都是這種強應用的類型

只要一個對象還保留的有引用,他就不會被垃圾回收

Map<String,Bitmap> map;

核心代碼:

sd卡緩存

public class MyReadAdapter extends BaseAdapter{
 private List<CollectionEntry> entrys;
 public MyReadAdapter(CollectionFeed feeds) {
  entrys = feeds.getEntries();
 }
 public int getCount() {
  return entrys.size();
 }
 public Object getItem(int position) {
  return entrys.get(position);
 }
 public long getItemId(int position) {
  return position;
 }
 public View getView(int position, View convertView, ViewGroup parent) {
  View view = infalter.inflate(R.layout.myread_item, null);
  final ImageView iv = (ImageView) view.findViewById(R.id.book_img);
  //獲取數據實體
  CollectionEntry ce = entrys.get(position);
  //獲取圖片地址
  String iconurl = ce.getSubjectEntry().getLink("image", null).getHref();
  int start = iconurl.lastIndexOf("/");
  int end = iconurl.length();
  final String iconname = iconurl.substring(start, end);
  //Environment.getExternalStorageDirectory()這個是sd卡目錄
  File file = new File(Environment.getExternalStorageDirectory(),iconname);
  //獲取sd卡緩存
  if(file.exists()){
   iv.setImageURI(Uri.fromFile(file));
   Log.i(TAG,"使用sd卡圖片");
  }else{
   new LoadImageAsynTask(new ImageTaskCallback() {
   // 圖片獲取之后
   public void onImageLoaded(Bitmap bitmap) {
    if(bitmap!=null){
    iv.setImageBitmap(bitmap);
    //把圖片存到sd卡上
    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
     try {
      File file = new File(Environment.getExternalStorageDirectory(),iconname);
      FileOutputStream fos = new FileOutputStream(file);
      bitmap.compress(CompressFormat.JPEG, 100, fos);
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
    }else{
     iv.setImageResource(R.drawable.book);
    }
   }
   //圖片獲取之前
   public void beforeImageLoaded() {
    iv.setImageResource(R.drawable.book);
   }
  }).execute(iconurl);
  }
  return view;
 }
}

內存緩存

Map<String,SoftReference<Bitmap>> map;
public class MyReadAdapter extends BaseAdapter{
 private List<CollectionEntry> entrys;
 public MyReadAdapter(CollectionFeed feeds) {
  entrys = feeds.getEntries();
 }
 public int getCount() {
  return entrys.size();
 }
 public Object getItem(int position) {
  return entrys.get(position);
 }
 public long getItemId(int position) {
  return position;
 }
 public View getView(int position, View convertView, ViewGroup parent) {
  View view = infalter.inflate(R.layout.myread_item, null);
  final ImageView iv = (ImageView) view.findViewById(R.id.book_img);
  //獲取到數據的實體
  CollectionEntry ce = entrys.get(position);
  //獲取到圖片的Url
  String iconurl = ce.getSubjectEntry().getLink("image", null).getHref();
  int start = iconurl.lastIndexOf("/");
  int end = iconurl.length();
  final String iconname = iconurl.substring(start, end);
  //使用內存緩存
  if(map!=null && map.get(iconname)!=null){
   iv.setImageBitmap(map.get(iconname).get());
   Log.i(TAG,"使用內存緩存");
  }
  else{
  new LoadImageAsynTask(new ImageTaskCallback() {
   // 圖片獲取之后
   public void onImageLoaded(Bitmap bitmap) {
    if(bitmap!=null){
    iv.setImageBitmap(bitmap);
    //存放到內存中,
    //軟引用類型的bitmap
    map.put(iconname, new SoftReference<Bitmap>(bitmap));
    }else{
     iv.setImageResource(R.drawable.book);
    }
   }
   //圖片獲取之前
   public void beforeImageLoaded() {
    iv.setImageResource(R.drawable.book);
   }
  }).execute(iconurl);
  }
  return view;
 }
}

希望本文所述對大家Android程序設計有所幫助。

相關文章

  • Android串口通信apk源碼詳解(附完整源碼)

    Android串口通信apk源碼詳解(附完整源碼)

    這篇文章主要介紹了Android串口通信apk源碼詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Android使用http實現注冊登錄功能

    Android使用http實現注冊登錄功能

    這篇文章主要為大家詳細介紹了Android使用http實現注冊登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android ViewPager源碼詳細分析

    Android ViewPager源碼詳細分析

    這篇文章主要為大家詳細介紹了Android ViewPager源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android?Hilt?Retrofit?Paging3使用實例

    Android?Hilt?Retrofit?Paging3使用實例

    這篇文章主要介紹了Android?Hilt依賴注入的使用,首先,某個類的成員變量稱為依賴,如若此變量想要實例化引用其類的方法,可以通過構造函數傳參或者通過某個方法獲取對象,此等通過外部方法獲取對象實例的稱為依賴注入
    2023-01-01
  • 詳解Android 裸眼3D效果View控件

    詳解Android 裸眼3D效果View控件

    主要的設計核心是依賴于傳感器對手機晃動的監(jiān)聽(重力感應監(jiān)聽器),對每層圖片進行不同的移動,實現仿3D效果。本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-08-08
  • android使用ViewPager實現輪播效果

    android使用ViewPager實現輪播效果

    這篇文章主要為大家詳細介紹了android使用ViewPager實現輪播效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android自定義AvatarImageView實現頭像顯示效果

    Android自定義AvatarImageView實現頭像顯示效果

    這篇文章主要為大家詳細介紹了Android自定義AvatarImageView實現頭像顯示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android實現為ListView同時設置點擊時的背景和點擊松手之后的背景

    Android實現為ListView同時設置點擊時的背景和點擊松手之后的背景

    這篇文章主要介紹了Android實現為ListView同時設置點擊時的背景和點擊松手之后的背景,以實例形式較為詳細的分析了界面元素與功能的實現技巧,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • Android Jetpack庫剖析之Lifecycle組件篇

    Android Jetpack庫剖析之Lifecycle組件篇

    本章也是帶來了Jetpack中我認為最重要的架構組件Lifecycle的原理探索,至于為什么覺得它是最重要是因為像ViewModel,LiveData這些組件也依賴于Lifecycle來感知宿主的生命周期,那么本章我們帶著幾個問題來探索一下這個組件
    2022-07-07
  • 在Kotlin開發(fā)中如何使用集合詳解

    在Kotlin開發(fā)中如何使用集合詳解

    這篇文章主要給大家介紹了關于在Kotlin開發(fā)中如何使用集合的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03

最新評論

眉山市| 普安县| 娱乐| 土默特右旗| 宜川县| 南昌市| 左云县| 子长县| 惠东县| 凤翔县| 哈尔滨市| 化隆| 江陵县| 容城县| 浠水县| 麻阳| 南安市| 荔波县| 龙胜| 漳州市| 金门县| 江孜县| 香河县| 黄冈市| 大方县| 两当县| 滦南县| 如东县| 岑巩县| 比如县| 乌兰县| 平湖市| 阿城市| 叙永县| 驻马店市| 从江县| 井研县| 泸西县| 甘谷县| 灌云县| 宁蒗|