Android中使用SoftReference缓存图片对象


Java中的SoftReference
即对象的软引用。如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。使用软引用能防止内存泄露,增强程序的健壮性。   
SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。另外,一旦垃圾线程回收该Java对象之后,get()方法将返回null

用Map集合缓存软引用的Bitmap对象

Map<String, SoftReference<Bitmap>> imageCache = new new HashMap<String, SoftReference<Bitmap>>();
//强引用的Bitmap对象
Bitmap bitmap = BitmapFactory.decodeStream(InputStream);
//软引用的Bitmap对象
SoftReference<Bitmap> bitmapcache = new SoftReference<Bitmap>(bitmap);
//添加该对象到Map中使其缓存
imageCache.put("1",softRbitmap);
..
.


//从缓存中取软引用的Bitmap对象
SoftReference<Bitmap> bitmapcache_ = imageCache.get("1");
//取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空

Bitmap bitmap_ = bitmapcache_.get();

如果程序中需要从网上加载大量的图片 这时就考虑采用在sdcard上建立临时文件夹缓存这些图片了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Frida-trace跟踪Android应用程序类的简单例子: 1. 首先,确保您已经安装了Frida和Frida-trace。您可以从Frida官方网站或者GitHub仓库下载并安装Frida。安装完成后,您可以使用以下命令来安装Frida-trace: ``` npm install -g frida-trace ``` 2. 然后,选择一个要跟踪的Android应用程序。假设您选择的应用程序包名为com.example.app。 3. 接下来,使用以下命令启动Frida-trace: ``` frida-trace -U -f com.example.app -m "classes" ``` 这个命令将会启动Frida-trace,监听所有类的加载。请注意,-U选项表示在USB上连接的设备上运行Frida-trace,-f选项指定要跟踪的应用程序,-m选项指定要跟踪的模式,这里我们使用“classes”。 4. 最后,您可以打开您选择的应用程序并执行一些操作,例如打开一个新的活动。当应用程序加载一个新的类时,Frida-trace将会显示相关信息,例如类名、类加载器、父类等。 ``` Loaded: java.lang.String @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Object @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Class @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Package @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Runtime @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.System @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Thread @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ThreadGroup @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Throwable @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.annotation.Annotation @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ref.Reference @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ref.SoftReference @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ref.WeakReference @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.Locale @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.ResourceBundle @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.concurrent.atomic.AtomicBoolean @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.concurrent.atomic.AtomicInteger @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.concurrent.atomic.AtomicLong @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.regex.Pattern @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.AccessibleObject @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Array @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Constructor @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Field @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Method @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Modifier @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Proxy @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.ArrayList @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.Collections @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 ``` 上述例子演示了如何使用Frida-trace在Android应用程序跟踪所有类的加载。您可以使用类似的方法来跟踪其他模式,或者使用Frida提供的API来自定义和扩展Frida-trace的功能。如果您需要更多关于Frida-trace的信息,请参考Frida官方文档或者在GitHub上查看Frida-trace的源代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值