在开发安卓中,我们知道当需要使用一个经常使用的工具类的时候,我们习惯性的就会把对象写成单例模式,让对象的构造方法私有化,不让外界去通过new关键字创建该对象的实体对象,但是用不能不让外界访问自己的方法,所以就提供一个静态的方法来获取实体对象来调用该类里面的成员方法,成员方法也就可以不用像工具类一样非要用static关键字修饰才能被调用。而是通过该类通过获取实体的静态方法来获取对象后调用成员方法。getInstance()方法一般也会加入synchronized关键字修饰来对创建对象的方法进行加锁(不一定能锁住,所以有的人会二次判断对象是否为null).这样我们就实现了一个单例模式实体类的创建。
之前看别人写代码总是把工具类写成静态方法的封装类,就很奇怪为啥不写成单例模式类来封装工具类,但是现在想想其实那么做也并没有错,因为我们创建的单例类其实也是静态的,和工具方法一样,如果不释放掉资源,单例占用的内存空间应该会更多,因为JVM需要实例化这个单例类就需要分配更多的内存资源,所以,单例模式其实只适合那些经常需要调用的方法,但是我们又不想到处去创建对象,这时候用单例模式封装对象就比到处创建对象好很多,所以,并不是什么时候都适合用单例模式的。
近期项目在进行内存的优化,通过leakcanary检测到自己写的单例实体对象,出现了内存泄漏问题,才想起单例对象其实也是用static关键字修饰的,这以为着该对象会加载在堆内存,如果不手动去释放资源,JVM是不会回收该对象的,所以我们就得到了今天的课题:《安卓开发中如何正确的释放掉创建的单例对象?》。
单例实例会不会被JVM垃圾回收
安卓如何正确的释放掉长期不用的单例实例对象
最新推荐文章于 2025-02-26 10:08:38 发布
