android studio列模式,在Android studio 中使用单例模式

本篇简单介绍如何在Android studio中 使用单例模式和使用注意事项。

单例模式

为什么要使用单例模式?

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

单利模式使用

public class Sensor {

// 使用静态变量记录唯一的实例

private static Sensor sensorInstance;

/**

* 私有的构造方法

*/

private Sensor(){}

/**

* 实例化方法

* @return Sersor

* synchronized包住不会有两个线程同时进入

*/

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 中使用内存泄漏问题

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

然后顺利成章的

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

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

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

2.同样在急切的方法中

public class Sensor {

public static final Sensor SENSOR_INSTANCE = new Sensor();

private List mListenerList;

private Sensor() {

mListenerList = new ArrayList();

}

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();

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现

本项目演示链接地址》 项目使用java SpringMVC、springboot mybatis、layui为核心技术编写 多的不说,直接上一部分效果图吧 首页登录有可爱的小猫咪 系统主页主要功能有会员信息、宠物管理、预约管理和统计分析等 预约列表 医院管理 宠物档案管理 下载订阅地址 相…

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现

本项目演示链接地址 》 主要功能设计: 运行环境: java jdk 1.8环境:IDEAtomcat环境: Tomcat 7.x,8主要功能说明: 管理员角色包含以下功能:管理员登录,订单管理,摄影师管理,级别管理,标签管理,摄影地点管理,客片管理,轮…

android 通知传值,Android消息通知(notification)和PendingIntent传值

Android支持Toast和NotificationManager两种通知方式,前者相当于一个定时关闭的对话框,后者是在状态栏上显示一条消息。Toast和Notification都可以随时取消。ToastA toast is a view containing a quick little message for the user. The toast class h…

基于java SSM医药住院管理系统设计和实现

本项目演示链接地址 》 主要功能设计:入院管理,登记、出院登记、查询、转房、病房管理、病房价格调整、缴费和记录、护理、住院历史、统计、药品管理、医生、用户、系统 springMVC spring mybatis jquery js css tomcat mysql等技术 主要功能截图如下…

nodejs+html转换pdf,Nodejs 中将html转换成pdf文件

Nodejs 中将html转换成pdf文件,Nodejs Convert html into pdf1. 下载phantomjs.exe,将该文件放在根目录2. 编写pdf.js文件(在github上下载phantomjs相关的测试文件,仿照rasterize.js文件编写pdf.js文件)3. Nodejs调用phantomjs,将html页面转换…

android 接口403,403: 请求被理解,但它被拒绝 Twitter Android_android_开发99编程知识库...

我正在尝试从安卓上推 Twitter 。 现在,我已经在 dev.twitter 上创建一个应用程序,并从下载示例代码 ,并使用我的应用密钥更新两个键。现在我运行代码身份验证帐户和 in,这个tweet包含图像和文本两个图像在URL中定义。 现在我第一…

android回收站目录详解,android - 如何在回收站适配器外部的回收站视图中获取当前商品的位置 - 堆栈内存溢出...

我在整个屏幕上显示一个回收站视图,该回收站视图只有一个图像视图,我想知道如何在回收站适配器之外获取屏幕上显示的imageview的位置。我试图实现一个接口,但结果不准确。我想立即保存当前位置。我的回收站适配器:public class Re…

基于jsp+Spring boot+mybatis的图书管理系统设计和实现

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 前言 随着网络技术的发…

二叉树为空意味着二叉树_不怕面试被问了!二叉树算法大盘点

作者 | BoCong-Deng题图 | 视觉中国出品 | CSDN博客树结构对于程序员来说应该不陌生,特别是二叉树,基本只要接触算法这一类的都一定会碰到的,所以我打算通过一篇文章,对二叉树结构的相关算法进行总结汇总,思路和代码实…

android 开发环境以及hello world,Android Studio开发环境搭建和HelloWorld

先下一个Pie吧然后发现run的位置是灰色的,而且这个Add Configuration没有下拉列表我去百度了一下这个问题,它让我在下拉列表里找APP???百度上面没有找到关于这个的解答,我就想是不是我的安装包出问题了,于是我就卸了重新装彻底…

基于jsp+mysql+Spring+hibernate+在线学习交流论坛平台

本项目演示链接地址 》 主要功能模块设计: 管理员角色包含以下功能:管理员登录,发布公告,修改资料,查看新帖,查看精华帖请求,封锁用户,创建讨论区等功能。 用户角色包含以下功能:按分类查看,用户登录,查看帖子详情,查看我的帖子,提交帖子,资料…

基于jsp+Spring+mybatis的SSM企业门户网站设计和实现

本项目演示链接地址 》 前言 人类社会已经迈入了21世纪,信息技术的浪潮也冲击着社会的方方面面。以计算机互联网为核心的科学技术为社会各行各业提供了前所未有的机会和发展潜力。生产业也不例外。互联网走到今天,也有五年的光景了,之间经历了…

html+字体图标找不到字体,bootstrap中不显示字体图标问题怎么解决?

bootstrap中不显示字体图标的原因是什么?怎么解决?下面本篇文章给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。你在使用bootstrap字体图标的时候,是否遇到引用本地Bootstrap文件无法…

buffsize 缓冲区的大小多少合适_对于Redis性能指标监控!你了解多少?

监控指标性能指标:Performance内存指标: Memory基本活动指标:Basic activity持久性指标: Persistence错误指标:Error监控方式redis-benchmarkredis-statredis-fainaredisliveredis-climonitorshowlog1.get:获取慢查询日志2.len&am…

java怎么确定数据在区间内_处理数据时,单元格内内容太多无法计数怎么破?...

在职场办公中,处理数据时有时会遇到古里古怪的数据源,比如从系统导出来的或是表哥表弟们录入数据的不规范。从而使得后续处理起来比较棘手。规范数据源很重要!话不多说,先来看看今天要分享的案例:每个订单下有多种物料…

html调用app store,iOS 获取appStore的链接地址,从app中跳转 appStore中应用

从app中跳转到appStore中,分为1.取得app在appStore中的链接地址mac打开iTunes,在右上角中的搜索框中输入你的应用名称。在弹出的菜单中,选择复制链接,得到该应用的链接地址:https://itunes.apple.com/cn/app/jie-zou-da-shi/id493…

上下级平台之间数据同步方案_Alluxio与底层存储系统之间的元数据同步机制

请点击上方蓝字,关注我们哦!作者简介:林意群,Apache Hadoop PMC member,Apache Ozone PMC member,拥有多年参与开源社区经验,主要专注于存储领域的研究和学习,目前任eBay Hadoop tea…

python3dijkstra_python3 实现Dijkstra(迪杰斯特拉)最短路径算法

Dijkstra单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据…

基于java SSM图书管理系统简单版设计和实现

本项目演示链接地址 》 主要技术:后台采用技术: SSM框架(SpringMVC Spring Mybatis) 前台采用技术: div css 功能比较简单、适合学习使用 主要功能:登录、图书类型添加、图书类型列表、编辑和删除、图书上传。图书列表、导出…

樊登读书会终身成长读后感_终身成长读后感

当我们还是婴儿时,我们学习走路、说话,跌倒了、说错了,不会害怕和丢脸。后来,我们懂得了更多,反而怕这怕那,止步不前了。为什么呢?因为我们转变了思维模式。《终身成长》一书中提出了人的思维是…