package com.example.gp11_day10_news.adapter;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.example.gp11_day10_news.R;
import com.example.gp11_day10_news.asynctask.DownImageTask;
import com.example.gp11_day10_news.entity.News;
import com.example.gp11_day10_news.tool.Urls;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class NewsAdapter extends BaseAdapter {
private Context context;
private List<News> datas;
/*private Object obj = new Object();//强引用---在任何情况下都不会被回收
//SoftReference----当内存不足时会回收软引用的对象
String ss = "hello";
SoftReference<String> soft = new SoftReference<String>(ss);
soft.get();//hello 得到软引用指向的对象*/
private ExecutorService es = Executors.newFixedThreadPool(2);
//使用一级缓存,也就是内存来对图片进行缓存
//map集合的键是图片的地址,值是图片的软引用
//把第一次下载的图片存入map,当再次下载时先从缓存中判断是否有该图片
private Map<String,SoftReference<Bitmap>> imageCatche = new HashMap<String,SoftReference<Bitmap>>();
public NewsAdapter(Context context, List<News> datas) {
super();
this.context = context;
this.datas = datas;
}
@Override
public int getCount() {
int count = 0;
if(datas!=null)
count = datas.size();
return count;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
if(convertView==null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.item_news, parent, false);
ViewHolder holder =new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
holder.text_subject = (TextView) convertView.findViewById(R.id.text_subject);
holder.text_summary = (TextView) convertView.findViewById(R.id.text_summary);
holder.text_changed = (TextView) convertView.findViewById(R.id.text_changed);
convertView.setTag(holder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
News news = datas.get(position);
holder.text_subject.setText(news.getSubject());
holder.text_summary.setText(news.getSummary());
holder.text_changed.setText(news.getChanged());
//得到图片路径
String imageUrl = "http://litchiapi.jstv.com"+news.getCover();
holder.imageView.setTag(imageUrl);//防止图片错位
holder.imageView.setImageResource(R.drawable.ic_launcher);
//先取缓存中查找是否有需要下载的图片
SoftReference<Bitmap> soft = imageCatche.get(imageUrl);
if(soft!=null)
{
Bitmap bitmap = soft.get();
if(bitmap!=null)
holder.imageView.setImageBitmap(bitmap);
else
//使用异步任务下载图片
downImage(imageUrl,parent);
}
else
//使用异步任务下载图片
downImage(imageUrl,parent);
//使用异步任务下载图片
// new DownImageTask(new DownImageTask.DownBack() {
//
// @Override
// public void response(String url, Bitmap bitmap) {
//
// ImageView imageView = (ImageView) parent.findViewWithTag(url);
// if(imageView!=null)
// imageView.setImageBitmap(bitmap);
// }
// } ).execute(imageUrl);
return convertView;
}
//下载图片的函数
public void downImage(final String imageUrl,final ViewGroup parent)
{
new DownImageTask(new DownImageTask.DownBack() {
@Override
public void response(String url, Bitmap bitmap) {
ImageView imageView = (ImageView) parent.findViewWithTag(url);
if (imageView != null)
imageView.setImageBitmap(bitmap);
//把图片放入缓存
imageCatche.put(url, new SoftReference<Bitmap>(bitmap));
}
}).executeOnExecutor(es, imageUrl);
}
class ViewHolder
{
ImageView imageView;
TextView text_subject,text_summary,text_changed;
}
}
相关推荐
当今用于探测和阻止无人机的 10 种反无人机技术
利用反无人机技术应对无人机威胁。
软引用、弱引用、虚引用 总结
在看‘深入JAVA虚拟机’垃圾收集这一章的时候了解有关对象的引用级别,在网上找了些资料总结备忘。(该文章大多内容为多个网站的内容合并) 1、概述 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清...
CTF-Web习题:2019强网杯 UPLOAD
本题涉及知识点:代码审计、文件上传漏洞、反序列化漏洞
Mybatis系列6:弱引用缓存,软引用缓存和虚引用缓存
弱引用,软引用和虚引用在缓存中的应用
群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程
本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。
RIP协议
一、 Rip简介 早期在unix系统上使用,1988年才发布第一个rip协议标准“RFC1058”,是一种距离矢量(Distance-vector)协议。 1. 特点: 只关心跳数,下一跳,不关心整网拓扑。 基于传闻的路由协议。 2. 场景: 适用于规模小且可靠性要求低的网络环境,部署简单,因为其跳数限制,不适用于大型网络。 3. 工作原理: - 开启RIP发送RIP请求 - 接受请求发出响应...
java的WeakHashMap可以用来做缓存使用?强软弱虚四种引用对比
java的WeakHashMap可以用来做缓存使用?强软弱虚四种引用对比
编程助手:CLAUDE.md 与 AGENTS.md 完全指南
AI编程助手配置文件指南 为解决AI编程助手在陌生项目中面临的运行、规范、架构等问题,本文提出两种配置文件: CLAUDE.md(根目录): 面向通用AI(如ClaudeCode) 包含项目命令、代码风格、架构说明等结构化信息 示例:启动命令:npm run dev,代码规范:TypeScript禁用any AGENTS.md(任意目录): 面向智能编码工具(如Cursor) 支持模块级配置(如微前端子应用) 示例:前端测试命令:npm test:web,API请求规范 与传统README.md的区别: 人
31、弱虚终结器引用
弱引用:对象只要没有强引用,垃圾回收器就会回收它。适用于缓存等不需要长期保持的对象。虚引用:它不会影响对象的生命周期,通常与引用队列一起使用,用于对象被回收时执行某些清理操作。终结器引用(finalize:垃圾回收时调用的清理方法,已经被废弃,不建议使用,现代 Java 推荐使用其他机制(如Cleaner或)来进行资源管理。
Transformer实战——Transformer自编码模型
自编码模型依赖于原始 Transformer 编码器,并且在解决分类问题时非常高效。除了 BERT 外,还有许多流行的自编码模型,在本节中,我们将一些除 BERT 外的自编码模型,这些模型的目标是通过优化预训练过程、增加层数或头数、改善数据质量、设计更好的目标函数等,来在下游任务上取得更好的表现。这些改进大致可以分为两个方面,更好的架构设计选择和预训练控制。
【ESP32CAM+Android+OpenCV】自定义目标数据集、训练自己的OpenCV模型部署到手机APP并对ESP32CAM无线图传显示并实时检测识别目标_资料编号30
本项目实现自定义目标数据集(想检测什么就检测什么,按照本文教程自己来更换目标)、训练自己的OpenCV模型实时检测识别(pycharm工程)。手机APP(Android studio工程)部署OpenCV模型实现对ESP32CAM(arduino工程)无线WIFI图传过来的图像实时检测识别。 本文以火焰检测识别为例进行演示,通过该过程,结合本文可自定义尝试更换为其它目标的检测,例如更换为车辆、车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人、口罩、行为、水果、植物、农作物、建筑、损伤等等部署进行检测。
Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...
一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了 通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~不用重新下载图片 但是手机内存是很有限的~当缓存的图片越来越多,即使单张图片不是很大,不过数量太多时仍然会出现OOM的情况了~ 本篇则是讨论多张图片的处理问题 -----------
数据分享|1961-2017年中国0.25°×0.25° 逐日地表水文数据集(VIC-CN05.1)
其中,全球径流中心(University of New Hampshire and Global Runoff Data Centre, UNH/GRDC)的复合产流场集成了观测的河道径流和水量平衡模式模拟的地表和地下径流,常被用来评估模拟的径流。在长白山、海北灌丛和千烟洲通量站,模拟与观测的逐月潜热通量的平均NSE为0.61。VIC-CN05.1受益于较准确的大气驱动场、先进的地表水文参数化方案以及更真实丰富的土壤信息,可作为中国水文气象研究的参照数据,用于陆面模式的评估和长期的趋势分析等。
Android缓存机制——一般存储实现
一、Android缓存机制 Android缓存分为内存缓存和文件缓存(磁盘缓存)。在早期,各大图片缓存框架流行之前,常用的内存缓存方式是软引用(SoftReference)和弱引用(WeakReference),如大部分的使用方式:HashMap<String url, SoftReference<Drawable>> imageCache;这种形式。从Android 2...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
android 图片的加载保存 与 二级缓存
// 学习中的一些Demo /* 需要考虑的内容 * 1.图片的设置用异步任务可能错错位 * 解决方案之一为,设置异步任务的时候,为ImageView 设置一个 tag,内容为图片的唯一标识 * 可以为网址,当回调任务返回时,判断此时的ImageView tag中的网址是否和 任务执行的网址相同, * 如果不相同,说明复用的Im
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
Android LruCache 二级缓存
简介 LRU全称Least Recently Used,顾名思义就是缓存最近使用频率高的缓存,具体数量根据指定的存储空间大小决定。内部存在一个LinkedHas...
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
Android 缓存机制
一、Android缓存机制 Android缓存分为内存缓存和文件缓存(磁盘缓存)。在早期,各大图片缓存框架流行之前,常用的内存缓存方式是软引用(SoftReference)和弱引用(WeakReference),如大部分的使用方式:HashMap<String url, SoftReference> imageCache;这种形式。从Android 2.3(Level 9)开始,垃圾回收器更倾向于回收SoftReference或WeakReference对象,这使得SoftReference和W
Android换肤功能设计与实现(5)——网络加载及图片内存管理
在开发Android客户端应用时,经常要与Server端进行通信,最常用的也是最麻烦的就是 通过网络加载各种图片资源。由于与PC相比,手机的内存实在少的可怜。同时,为了提手机内同时运行的任务数,Android在系统 内对虚拟机是有最高内存限制的,默认在4.0上APP最高内存占用为48MB,在3.0以前最高位32MB。以上就是在开发Android客户端经常要面对的两个最主要的问题,下面一一进行解决。
Android 浅析Glide三级缓存
Android 简要分析Glide三级缓存 概括 Glide version is 4.8.0 Glide拥有三级缓存,分别为 当前正在使用得资源缓存(ActiveResources) 内存缓存(LruCache) 磁盘缓存(DiskLruCache) LRU(Lest Resently Used)算法,在内存缓存和磁盘缓存中均有用得到,笔者写过一篇Kotlin版本的LruCache的实现,感兴趣的可以查看。Kotlin LruCache 缓存读取 缓存大致分为两大部分,内存缓存与磁盘缓存,而内存缓
Android 使用 LruCache 缓存图片详解
本文详细介绍了Android中使用LruCache实现图片内存缓存的方法。针对列表等场景下大量图片加载导致的内存问题,提出通过LruCache建立最近最少使用算法缓存,并给出具体实现代码,包括缓存大小计算、图片存取等。同时补充了DiskLruCache磁盘缓存方案,建议采用内存+磁盘的二级缓存策略,优先内存读取,其次磁盘获取,最后网络下载。这种方案能提升加载速度、减少流量消耗,并支持离线访问。文中还对比了新旧缓存技术的差异,强调了合理设置缓存大小的重要性,为Android图片加载优化提供了完整解决方案。
[Android实例] Android Bitmap 全面解析(二)加载多张图片的缓存处理
一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了 通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~不用重新下载图片 但是手机内存是很有限的~当缓存的图片越来越多,即使单张图片不是很大,不过数量太多时仍然会出现OOM的情况了~ 本篇则是讨论多张图片的处理问题 -----------
ListView加载网络图片优化(加二级缓存使滑动流畅)
如果要从网络加载N多张图,就要考虑缓存问题。图片本来就属于比较占内存的资源,下载又耗时,还要开线程。假设我们滑动ListView的速度很快,ListView的个数又多,很容易造成OOM。所以要为其加缓存。当缓存中存在某张图片的时候,直接从缓存中拿,没有的话再去网络加载。在网络上看到一个双缓存的例子,觉得不错。将强引用和弱引用结合起来,取长补短。参考别的例子,将此例略作修改,贴个完整的例子供大家参考
android app缓存机制会自动清除,深入理解Android缓存机制(一)缓存简介
概述说起缓存,大家可能很容易想到Http的缓存机制,LruCache,其实缓存最初是针对于网络而言的,也是狭义上的缓存,广义的缓存是指对数据的复用,我这里提到的也是广义的缓存,比较常见的是内存缓存以及磁盘缓存,不过要想进一步理解缓存体系,其实还需要复习一点计算机知识。CPUCPU分为运算器跟控制器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指...
android 统计资源缓存,Android缓存机制——一般存储实现
一、Android缓存机制Android缓存分为内存缓存和文件缓存(磁盘缓存)。在早期,各大图片缓存框架流行之前,常用的内存缓存方式是软引用(SoftReference)和弱引用(WeakReference),如大部分的使用方式:HashMap> imageCache;这种形式。从Android 2.3(Level 9)开始,垃圾回收器更倾向于回收SoftReference或WeakRefe...
Android Bitmap 全面解析(二)加载多张图片的缓存处理
一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了 通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~不用重新下载图片 但是手机内存是很有限的~当缓存的图片越来越多,即使单张图片不是很大,不过数量太多时仍然会出现OOM的情况了~ 本篇则是讨论多张图片的处理问题 -------------
3544



被折叠的 条评论
为什么被折叠?



