You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Graphics与Others内存无法回收,如何优化内存占用?

降低图片应用Graphics与Others类别内存占用的方案

RAM Profiler

针对Graphics类别的优化手段

  • 按控件尺寸加载图片:Picasso默认会加载原始尺寸的图片,这是Graphics内存暴涨的核心原因之一。必须根据ImageView的实际大小缩放,用.fit()自动适配控件尺寸,搭配.centerCrop()或.centerInside()保证显示效果,示例代码:
    Picasso.get()
           .load(imageUrl)
           .fit()
           .centerCrop()
           .into(imageView);
    
  • 正确配置内存缓存:你添加的networkPolicy(NetworkPolicy.NO_CACHE)只禁用了网络缓存,和内存缓存无关。反而要合理设置内存缓存上限,避免重复解码图片占用内存,自定义Picasso实例的示例:
    Picasso picasso = new Picasso.Builder(context)
           .memoryCache(new LruCache(100 * 1024 * 1024)) // 设为100MB内存缓存,可根据机型调整
           .build();
    Picasso.setSingletonInstance(picasso);
    
  • 主动释放Bitmap资源:页面销毁或View不可见时,取消Picasso的请求并清空ImageView引用,防止Bitmap被持有无法回收:
    Picasso.get().cancelRequest(imageView);
    imageView.setImageDrawable(null);
    
  • 替换为WebP格式图片:WebP格式的图片解码后内存占用比JPG/PNG低30%左右,优先将资源替换为WebP格式。

针对Others类别的优化手段

  • 排查内存泄漏:Others类别通常包含未回收的自定义对象、第三方库资源。用Android Studio的Memory Profiler生成堆快照,按内存占用排序找出存活过久的对象,重点检查是否有静态引用、单例持有Activity/Fragment上下文这类泄漏场景。
  • 清理第三方库冗余资源:除了Picasso,检查其他依赖的SDK(统计、广告等)是否有未正确释放的回调或实例,比如某些SDK会持有全局上下文导致资源无法回收。
  • 及时清空集合数据:如果用List、Map存储图片相关数据,在不需要时(比如分页加载滑出屏幕的页面)及时清空,避免持有大量无用对象占用内存。
  • 检查Native内存:Others也可能包含Native层内存(比如Picasso底层的解码缓存),用Native Memory Profiler查看Native内存分配,确认是否有Native层的内存泄漏。

内容的提问来源于stack exchange,提问作者Developer-Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:35:13