iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android studio中使用单例模式
  • 274
分享到

怎么在Android studio中使用单例模式

2023-06-14 06:06:29 274人浏览 泡泡鱼
摘要

这篇文章主要介绍了怎么在Android studio中使用单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单例模式为什么要使用单例模式?有一些对象我们只需要一个,只需要

这篇文章主要介绍了怎么在Android studio中使用单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

单例模式

为什么要使用单例模式?

有一些对象我们只需要一个,只需要一个线程池缓存或是只有一台打印机、机器人 、机器人上面只有一个寻磁传感器。我们可以通过全局的静态变量来实现,但是全局变量在程序一开始就创建 可能比较耗费资源、可能一直没用到。单例模式和全局变量一样方便又没有它的缺点。

单利模式使用

public class Sensor {  // 使用静态变量记录唯一的实例  private static Sensor sensorInstance;    private Sensor(){}    public static synchronized Sensor getSersorInstance(){    if(sensorInstance == null) {       sensorInstance = new Sensor();    }    // 返回Sensor唯一实例    return sensorInstance;  }}

但是如果想要很急切的创建示例,而且在示例创建方面的负担不繁重。

public class Sensor {  private static Sensor sensorInstance = new Sensor();  private Sensor(){}  public static Sensor getSersorInstance(){    return sensorInstance;  }}

如果有很多线程频繁的使用getSersorInstance可能就影响性能,可以使用双重检查加

public class Sensor {  // volatile 保证 sensorInstance 被初始化 多个线程正确的处理  private volatile static Sensor sensorInstance;    private Sensor(){}    public static Sensor getSersorInstance(){    // 检查 sensorInstance是否存在 如果不存在就进入同步区块        if(sensorInstance == null) {      // 同步区块里面的代码只有在第一次才会执行      synchronized(Sensor.class) {        if(sensorInstance == null) {          sensorInstance = new Sensor();        }      }    }    return sensorInstance;  }}

Android 中使用内存泄漏问题

在实例化的时候我们经常需要传入一些参数 比如说 Context

然后顺利成章的

Sensor sensor = Sensor.getSersorInstance(MainActivity.this);

然后出现了一个很严重的问题Sensor单例持有了MainActivity 的this对象,所以当我们转跳其他Activity页面的时候MainActivity 的对象仍然得不到释放不能被回收。

所以我们应该使用Application中的 context

同样在急切的方法中

public class Sensor {    public static final Sensor SENSOR_INSTANCE = new Sensor();    private List<MyListener> mListenerList;    private Sensor() {      mListenerList = new ArrayList<MyListener>();    }    public static Sensor getInstance() {      return SENSOR_INSTANCE;    }    public void reGISterListener(MyListener listener) {      if (!mListenerList.contains(listener)) {        mListenerList.add(listener);      }    }    public void unregisterListener(MyListener listener) {      mListenerList.remove(listener);    }  }  interface MyListener {    public void onSomeThingHappen();  }

MainActivity:

public class MainActivity extends Activity {    private MyListener mMyListener=new MyListener() {      @Override      public void onSomeThingHappen() {      }    };    private Sensor sensor = Sensor.getInstance();      @Override    protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);      sensor.registerListener(mMyListener);    }}

非静态的内部类(Sensor)的对象(mListenerList)都是会持有指向外部类对象(mMyListener)的引用。因此外部类对象(mMyListener)被持有了 同样的不会被回收,内存泄漏,所以需要

@Override  protected void onDestroy() {    Sensor.unregisterListener(mMyListener);    super.onDestroy();  }

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么在Android studio中使用单例模式”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 怎么在Android studio中使用单例模式

本文链接: https://www.lsjlt.com/news/268425.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android studio中使用单例模式
    这篇文章主要介绍了怎么在Android studio中使用单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单例模式为什么要使用单例模式有一些对象我们只需要一个,只需要一...
    99+
    2023-06-14
  • 如何在Android studio 中使用单例模式
    目录单例模式单利模式使用Android 中使用内存泄漏问题本篇简单介绍如何在Android studio中 使用单例模式和使用注意事项。 单例模式 为什么要使用单例模式?...
    99+
    2022-11-11
  • android单例模式怎么实现
    在Android中,可以通过以下几种方式实现单例模式:1. 懒汉式```javapublic class Singleton {pr...
    99+
    2023-08-23
    android
  • 怎么在JavaScript中应用单例模式
    这篇文章将为大家详细讲解有关怎么在JavaScript中应用单例模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。javascript是一种什么语言javascript是一种动态类型、弱类型...
    99+
    2023-06-14
  • web中怎么使用单例模式
    这篇文章主要为大家展示了“web中怎么使用单例模式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中怎么使用单例模式”这篇文章吧。介绍单例模式,顾名思义就是...
    99+
    2022-10-19
  • Android设计模式之单例模式怎么创建
    本篇内容介绍了“Android设计模式之单例模式怎么创建”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、概念单例模式是运用最广泛的设计模式...
    99+
    2023-07-06
  • php单例模式怎么使用
    使用PHP实现单例模式的一种常见方式是通过定义一个私有的静态属性来保存类的实例,并使用一个公共的静态方法来获取该实例。 以下是一个简...
    99+
    2023-10-21
    php
  • mvp模式怎么在Android中使用
    这篇文章将为大家详细讲解有关mvp模式怎么在Android中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Control...
    99+
    2023-05-31
    android mvp模式 roi
  • Java中单例模式怎么用
    这篇文章给大家分享的是有关Java中单例模式怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注意单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。优点在内存里只有一...
    99+
    2023-06-29
  • php单例模式怎么正确使用
    正确使用 PHP 单例模式的步骤如下:1. 创建一个类,将其构造函数设置为私有,以防止通过 `new` 关键字创建对象。2. 在类中...
    99+
    2023-09-13
    php
  • Python中怎么实现单例模式
    本文小编为大家详细介绍“Python中怎么实现单例模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中怎么实现单例模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2022-10-19
  • php单例模式和工厂模式怎么应用
    单例模式和工厂模式是两种设计模式,可以在PHP中进行应用。1. 单例模式:单例模式是一种保证一个类只有一个实例对象的模式。在PHP中...
    99+
    2023-09-29
    php
  • Java中Spring的单例模式使用
    目录1.spring单例V.S设计模式的单例2.成员变量的解决方式3.Spring并发问题4.对实体bean在多线程中的处理5.spring无状态的支持6.spring有状态的支持7...
    99+
    2022-11-13
  • 怎么使用java枚举实现单例模式
    这篇文章主要介绍了怎么使用java枚举实现单例模式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用java枚举实现单例模式文章都会有所收获,下面我们一起来看看吧。用法说明:在功能上类似于 public 字...
    99+
    2023-07-04
  • lambda表达式如何在Android Studio应用中使用
    本篇文章为大家展示了lambda表达式如何在Android Studio应用中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。根目录下gradle文件配置buildscript { reposi...
    99+
    2023-05-31
    android studio lambda
  • 怎么在java中实现一个饱汉模式单例
    这篇文章将为大家详细讲解有关怎么在java中实现一个饱汉模式单例,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程...
    99+
    2023-06-14
  • 怎么在java项目中实现一个单例模式
    这篇文章将为大家详细讲解有关怎么在java项目中实现一个单例模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java设计模式之单例模式定义:如果一个类始终只能创建一个实例,那么这个类被称为...
    99+
    2023-05-31
    java 单例模式 ava
  • 单例模式在PHP框架中的使用与扩展
    前言:在PHP框架开发中,为了确保某个类只有一个实例,并且能够全局访问,我们常常会使用单例模式。单例模式能够对系统资源进行有效管理,提高系统性能和安全性。本文将探讨单例模式在PHP框架中的使用与扩展,并且提供具体的代码示例。一、单例模式的概...
    99+
    2023-10-21
    单例模式 PHP框架 扩展
  • 如何在Unity3D中使用单例模式和静态类
    本篇文章为大家展示了如何在Unity3D中使用单例模式和静态类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。静态类不能继承和被继承!(严格点说是只能继承System.Object)也就是说你的静态类...
    99+
    2023-06-14
  • Android项目中Lambda表达式怎么在Studio中引入
    今天就跟大家聊聊有关Android项目中Lambda表达式怎么在Studio中引入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。方法如下:依次点击 【File】【Other Sett...
    99+
    2023-05-31
    androidstudio lambda lambda表达式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作