java– 如何在内存中保留位图

java– 如何在内存中保留位图,第1张

概述继StoringaBitmapresourceinastaticvariable之后,似乎在View中存储对android.graphics.Bitmap的静态引用可能会泄漏对实例化它的第一个View的引用.在Android中解决这个问题的惯用方法是什么?每次实例化此视图的实例时,我都不想调用BitmapFactory.decodeResource(resource,id)

继Storing a Bitmap resource in a static variable之后,似乎在VIEw中存储对androID.graphics.Bitmap的静态引用可能会泄漏对实例化它的第一个VIEw的引用.在AndroID中解决这个问题的惯用方法是什么?每次实例化此视图的实例时,我都不想调用BitmapFactory.decodeResource(resource,ID),因为这将在每个Activity中完成(多次).我希望这个小的Bitmap始终保留内存中.那么,执行以下 *** 作的正确方法是什么:

public class MyVIEw extends VIEw {    private static Bitmap star;    public MyVIEw(Context context) {        synchronized(this) {            if (star == null) {                star = BitmapFactory.decodeResource(getResources(), R.drawable.star);            }        }    }    // ...}

解决方法:

在VIEw中创建一个静态清理方法,您可以从Activity的onPause()调用该方法.在该调用中,调用位图的recycle()并清除引用.同样,不是在构造函数中创建位图,而是在活动的onResume()中调用初始化调用.

如果您担心可能存在重叠,因为您的VIEw用于跨活动,则可以让init和clean-up调用保持引用计数,以便仅在计数达到0时销毁位图.如果位图足够小,你也可以考虑onCreate()/ onDestroy().

在使用之前,请务必检查视图类中的位图引用是否为null.

总结

以上是内存溢出为你收集整理的java – 如何在内存中保留位图全部内容,希望文章能够帮你解决java – 如何在内存中保留位图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1118833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存