android 单例,android service是单例吗

1,android service是单例吗android service不存在单列的问题,service是安卓一个组件 。单例是一种设计模式 。1、在实际运行中同样的service的确只能有一个 。2、service类没有必要运用单例模式 。
2,android中什么是单例模式单例模式(Singleton)一、什么是单例模式单例模式 , 简单点来说就是设计一个类,使其在任何时候 , 最多只有一个实例 , 并提供一个访问这个实例的全局访问点 。二、为什么要单例在程序中的很多地方,只有一个实例是非常重要的 。例如,在windows中 , 任务管理器只有一个,无论你点击多少次打开任务管理器,任务管理器也只会生成一个窗口 。再例如,在一些软件中,工具箱是唯一的,无论你点击多少次打开工具箱,工具箱也只一个 。为什么要这样设计呢?因为像任务管理器或工具箱这样的程序 , 只要有一个就足够完成所有的工作了 , 多个程序只会白白消耗系统资源,而像任务管理器这类的程序还会引入多个任务管理器之间的同步问题,所以对些这些程序来说,只有一个实例或程序是必要的 。三、为什么需要单例模式上面讲到对于某些程序来说,保持其只有一个实例是必要的,但是如何保证一个程序或一个类只有一个实例呢?下面从类的角度来解说 。
3,android之单例模式懒汉式和饿汉式的区别比较:饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变 。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的 。同问 。。。【android 单例,android service是单例吗】
4 , Android开发之Java设计模式基础篇今天我们就Android开发中的一些设计模式做一些基础性的掌握 , 本次就Android项目的架构设计相关内容做分析:1. 静态工厂方法静态工厂方法可以算是工厂方法加单例模式的整合在Android平台上 , 由于Android的Context可以很好的传递实例 , 静态工厂方法可以提到传统的类构造器,对于一些逻辑的服务提供类可以考虑这样的设计,比如文件下载、图片裁剪等操作 。2. Java的类访问权限对于程序的可靠性而言,成员变量尽量私有,通过暴漏公开的方法来访问这些私有成员 , 提供类似getXXX和setXXX这样的方法,不仅是Java,这点C#对于属性的操作概念在Dot Net上已经深入人心,好处就是可以阻止继承后的访问换乱问题 。3. 使用枚举替代常量Java在JDK 1.5开始加入了enum枚举类 , 相对于常规的final int这样的定义一些常量更简单安全,毕竟常量是一堆类似整形的数值,打印起来没有过多的意义,枚举对于继承后访问的清晰度可以很好的杜绝隐患发生 。4. 使用列表优先于数组Java的集合类很方便,使用List类的列表在开销上比Object [ ] 这样的数组大,但是对于泛型的支持而言更好用强大 。也可以避免一些不必要的错误,比如cwjObject [] obj= new int[1];obj[1] = "android开发网测试"; //这样会在运行时抛出类似ArrayStoreException这样的异常 。而使用列表则为:ListcwjObject obj=new ArrayListint();obj.add("android123测试"); // 由于传入列表的是字符串,和构造时类型的int不同 , 在编译时就提示错误 , 可以避免一些不必要的情况发生 。5. Java的foreach代替forJava的foreach仍然使用for来写 , 这点和C#直接用foreach关键字有点不同,但是使用方法是一样的,除了更简洁外,其实foreach比传统的for更加优化,比如传统的for第二个限制位,一般访问属性或方法,比如说for (int x=0;xobj.size();x++) //这句的限制符号每次都会执行obj.size() 方法 , 当然Android开发网相信size()方法访问的是一个数组的length属性,活着是for (int y=0;yobj.length;y++) //这里同样每次循环都执行obj.length对于Java VM的开销主要由这个obj的长度决定的,而Android SDK文档的推荐方式是int nSize=obj.size() 或 int nSize=obj.lengthfor (int z=0;znSize;z++),但是这还不是最优的方法,下面Android123给大家更好的foreach方式的替代方法:for (SmartObject singleObj : SmartObjectArray)singleObj.setName("cwj"); 或 singleObject.strName="cwj";}有关Android开发中的Java设计模式技巧,希望国内Android开发者打好Java基?。?别扎堆实现铺天盖地的应用,目前不说恶意软件问题 , 就大部分的软件设计质量令人担忧,还有很多应用基本上就是J2EE或J2SE开源项目的移植版 。5,Android之什么场景该使用单例模式总结我来补充下楼上: 进程关闭的时机是: 1.用process.kill或者shell去杀死进程 2.系统通过memory策略来杀死后台进程 。说说第二种吧 , 当程序按home键或者back键退出后就变做后台进程 。另外 , 当程序启动了新的进程 。而新的进程进入前台模式,此时程序也变成后台进程 。当前台进程退出,后台进程按照堆栈结构再次呈现时 。很可能是个重启进程的过程,重启进程意味着单例对象也重新初始化了 。这点要尤其谨慎当这个类的对象在多个地方创建的时候,使得内部的方法多次调用,但是希望只要一个对象操作这个方法,或者不希望多个地方同时调用这个方法,需要保持这个方法的单一性质,就用单利模式吧 。6 , android中什么是单例模式单例模式(Singleton)一、什么是单例模式单例模式,简单点来说就是设计一个类,使其在任何时候,最多只有一个实例,并提供一个访问这个实例的全局访问点 。二、为什么要单例在程序中的很多地方 , 只有一个实例是非常重要的 。例如,在windows中,任务管理器只有一个,无论你点击多少次打开任务管理器,任务管理器也只会生成一个窗口 。再例如,在一些软件中,工具箱是唯一的 , 无论你点击多少次打开工具箱,工具箱也只一个 。为什么要这样设计呢?因为像任务管理器或工具箱这样的程序,只要有一个就足够完成所有的工作了,多个程序只会白白消耗系统资源 , 而像任务管理器这类的程序还会引入多个任务管理器之间的同步问题,所以对些这些程序来说,只有一个实例或程序是必要的 。三、为什么需要单例模式上面讲到对于某些程序来说,保持其只有一个实例是必要的,但是如何保证一个程序或一个类只有一个实例呢?下面从类的角度来解说 。java模式之单例模式:单例模式确保一个类只有一个实例 , 自行提供这个实例并向整个系统提供这个实例 。特点:1 , 一个类只能有一个实例2,自己创建这个实例3,整个系统都要使用这个实例singleton模式主要作用是保证在java应用程序中,一个类class只有一个实例存在 。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作 。一些资源管理器常常设计成单例模式 。外部资源:譬如每台计算机可以有若干个打印机,但只能有一个printer spooler,以避免两个打印作业同时输出到打印机中 。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口 , 以避免一个通信端口被两个请求同时调用 。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置 。这样的系统应当由一个对象来管理这些属性文件 。一个例子:windows 回收站 。在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例 。因此,回收站是单例模式的应用 。两种形式:1,饿汉式单例类public class singleton private singleton()//在自己内部定义自己一个实例,是不是很奇怪?//注意这是private 只供内部调用private static singleton instance = new singleton();//这里提供了一个供外部访问本class的静态方法,可以直接访问public static singleton getinstance() return instance;}}2,懒汉式单例类public class singleton private static singleton instance = null;public static synchronized singleton getinstance() //这个方法比上面有所改进,不用每次都进行生成对象 , 只是第一次//使用时生成实例,提高了效率!if (instance==null)instance=new singleton();return instance;}}第二中形式是lazy initialization,也就是说第一次调用时初始singleton,以后就不用再生成了 。注意到lazy initialization形式中的synchronized , 这个synchronized很重要,如果没有synchronized,那么使用getinstance()是有可能得到多个singleton实例 。一般来说第一种比较安全我自己比较常用的方式:public class singleton private volatile static singleton singleton;private singleton()public static singleton getinstance()if(singleton==null)synchronized(singleton.class)if(singleton==null)singleton=new singleton();}}}return singleton;}}7,android studio单例怎么使用android studio使用单例的情况有很多,大多数是工具类,可以使用单例,里面有很多static方法,很方便的使用这些方法 。android studio出版已经有一段时间了,经过这一段时间的实际应用,切身体会到android studio和eclipse之间的优劣之处,现在将其总结如下:1,工程管理:a,新建工程时,android studio和eclipse新建工程的文件夹组织方式不同 , 开发环境之间的共容性较差,比如要将eclipse中的project导入到android studio中需费一定的周折,而要将android studio中的工程导入到eclipse中 , 却没有比较简单的方法,只能一个文件一个文件的拷贝 。b,新建工程后,设置工程的属性比较难,在eclipse中直接去properties设置就可以,但是在android studio中,0.1版提供了一个界面设置project structure,我设置过很多次,遇到各种问题,在android studio中新建的工程问题较少 , 但是从eclipse中导入的工程就比较容易出bug,比如找不到lib,找不到sdk , 当升级到0.1.1版的时候直接没有界面了,当点击project structure的时候,提示:我们以后会提供一个界面来配置工程的设置,但是在这之前需要自己在gradle里去手动设置 。c,新建或导入工程后,要删除工程 , android studio只能去workspace文件夹去删除,而不能在开发环境中删除 。d,在eclipse中引用库项目非常简单 , 库项目properties里android lib打钩 , 然后就可以直接在项目中引用了,但是在android studio中,由于时间的关系 , 我到现在没找到解决方法 。综上所述,在管理工程这块,可能是对android studio比较陌生,不习惯,总觉得android studio远不如eclipse.2,ide界面:a,android studio提供的dock留边停靠完胜eclipse,在eclipse中要是想用更大的视野来显示一个view,而隐藏其他的view的一个方法就是点x,关闭后要打开就比较麻烦了,而android studio是将常用的view最小化dock到其边界,更加人性化,已操作和灵活 。b,第二点,eclipse的启动速度令人蛋碎呢,每次开机先启eclipse,后启动其他程序 , 其他程序都百米5s的速度,eclipse都还没上起跑线 。c,还有eclipse的死机问题非常严重 , 我的ubuntu每天都要因为eclipse死机的问题来重启,有的时候甚至一天五六次 。3,项目编码:a,android studio中的图标在每行最开始表示,使开发者更加可视化了自己的界面,程序等 , 这是android studio的最大亮点 。b,错误提示不比eclipse提示,eclipse放在错误上边即可提示,android studio需要按快捷键command+1才能显示 。c,拷贝一个方法或字段到另一个地方时 , eclipse中是连它的引入类一起拷贝,比如拷贝list时会连import java.util.list和import android.bluetooth.bluetoothdevice一起拷贝过去,而android studio会给用户提供一个选择,要拷什么不要拷什么会给用户一个界面来勾选 。d,android studio 中 command+w可以直接快速定位到最近编辑的文件,不知道eclipse中有没有,暂时没有发现 。e,inspect code,利用android lit可以帮助开发者自动检查代码中的错误和有可能出现bug的地方 。f,在android studio中code assistance要远远强大于eclipse,比如你可以先调用方法,再写方法时会有提示,而在eclipse中只能傻傻地自己写,没有提示 。还有一个,拷贝string或color中的value前选择value的时候,eclipse的反应速度慢到无法忍受 。4 , res资源:a,android studio中的颜色等都在每行最开始表示,使开发者更加可视化了自己的界面,程序等,这是android studio的最大亮点 。b,在代码中可以看到资源中不痛分辨率下的drawable图像 , 将光标放置图像名字中间,点view-quick documation即可看到,由于是在本环境中打开,而不是像eclipse中重启程序打开,所以打开图像的速度远远小于eclipse 。c,生成res的values文件更简单,感觉创建时更倾向于android开发,android专用,不像eclipse那么复杂 。d,提示更加完善,比如如果将button拼成bitton,android studio会自动检查出来,如果没有layout_width或layout_height,会自动检查出来并提供选项让开发者选择 。e,在android studio中提供了一个preview视图,可以和layout.xml文件进行关联,在xml文件中改属性,或添加组件 , 会动态在preview视图中表现出来 , 而且可以添加不同语系,不痛屏幕尺寸的android设备 。5 , 编译代码:a,在eclipse中编译速度感觉要慢于android studio,但是在eclipse中有一个build automatically的功能,觉得挺好用,在android studio中未找到,只能在每次安装前手动编译 。b,编译后选择运行的平台,eclipse中会自动打开软件,而android studio会安装软件 , 需要手动打开 。6,log查看:a,log查看相比较而言,还是android studio稍微先进于eclipse,在eclipse很多次,我删掉的tag,第二次打开eclipse,它又存在于左边的list当中,adnroid studio看起来界面比较友好,使人更容易找出log 。以上几点是在这段时间来试用android studio和eclipse的真实体验,优缺点介绍的不那么完善,可能其中也存在一些问题 , 毕竟仁者见仁,智者见智,个人觉得相对而言,总体还是android studio 略胜eclipse一筹,由于android studio是新版本 , 还是不断的完善当中,所以建议初学者可以直接学习用android studio来开发,因为在我看来,android studio代替eclipse来写android程序已经是大趋势,不可避免的了 , 谁先掌握了此工具的用法,谁就会比其他开发者更有优势 , 编程优势,面试优势等 , 但是毕竟android studio才刚出现,还年轻,难免会出现一些比较难解的bug,所以建议有经验的开发者暂时先用eclipse来开发 , 毕竟熟悉了那么长时间了,不会像android studio那样,如果中奖碰上大的bug,那真是叫天不应,入地无门啊,整个项目的进度就得耽搁很久了。

    推荐阅读