导航:首页 > 操作系统 > android单例

android单例

发布时间:2022-04-02 07:57:01

‘壹’ android activity单实例化什么意思

意思就是这个Activity只能有一个实例(如果被多次启动的话)

manifest.xml里面配置 在activity标签下的属性

android:launchMode="standard"
有4种可以选 默认就是上面这种,,标准的 每次startActivity都会实例化一个实例
还有3种:singleTop 启动此模式的activity的时候 如果在堆栈顶部已经有这个activity的实例则不重新实例化,就用堆栈顶部这个 否则就实例化一个新的activity对象
singleTask 启动此模式的activity的时候 如果在堆栈中存在此activity的实例(任意位置),则不重新实例化activity对象 而是直接复用之前的activity对象 在这个activity对象上面的其他activity对象全部移除(相当于这些activity被销毁了);这个应该就是你说的单实例化
singleInstance 这个是单个实例 会单独启动一个堆栈来存放此启动模式的activity实例!

‘贰’ android 几种单例模式的写法

先不论单例模式的写法,有些方面是相同的,比如都需要将唯一的对象设置为static的,都需要将构造方法private化,代码如下:
public class MyInstance { private static MyInstance instance; private MyInstance(){}
}
第一种:最原始的单例模式,代码如下:
public static MyInstance getInstance(){ if(instance==null){ instance=new MyInstance();
} return instance;
}
多线程并发时,可能会出现重复new对象的情况,因此不提倡使用。
第二种:将整个方法块进行加锁,保证线程安全。
public static synchronized MyInstance getInstance(){ if(instance==null){ instance=new MyInstance();
} return instance;
}

这种代码下,每条线程都会依次进入方法块内部,虽然实现了单例,但是影响了运行效率,可以使用但是也不怎么提倡。
第三种:进一步优化的方法。
public static MyInstance getsInstance(){ synchronized (MyInstance.class){ if(instance==null){ instance=new MyInstance(); return instance;
}else{ return instance;
}
}
}

这种方式只是第二种方法的一种优化,但是优化有限。
(以下的几种方法比较推荐使用)
第四种:双层判断加锁,效率影响小且保证了线程安全。
public static MyInstance getsInstance() { if (instance == null) { synchronized (MyInstance.class) { if(instance==null){ instance=new MyInstance();
}
}
} return instance;
}

这种方法是对第二种和第三种方法的进一步优化,比较推荐使用。
第五种:内部类实现单例,不用线程锁来实现效率的提升。
public class MyInstance { private MyInstance() {
} public static MyInstance getInstance(){ return MyInstanceHolder.instance;
} private static class MyInstanceHolder{ private static MyInstance instance=new MyInstance();
}
}

在内部类中new对象,再将内部类的对象返回,这种方法是使用了java中class加载时互斥的原理来实现了线程的安全。不加线程锁也使得运行效率不会受到较大的影响。比较提倡。

‘叁’ android service是单例吗

android service不存在单列的问题,service是安卓一个组件。单例是一种设计模式。
1、在实际运行中同样的Service的确只能有一个。
2、Service类没有必要运用单例模式。

‘肆’ android 单例Singleton可否用于多进程

单例模式(Singleton) 一、 什么是单例模式 单例模式,简单点来说就是设计一个类,使其在任何时候,最多只有一个实例,并提供一个访问这个实例的全局访问点。 二、 为什么要单例 在程序中的很多地方,只有一个实例是非常重要的

‘伍’ 安卓的service可以单例吗

这要看你的service是通过什么方式启动的 一:如果你通过startService()方式启动的话,那么当你关闭了activity之后 你的service依然还在运行当中。 二:如果你通过bindService()方式启动的话,那么他是跟随activity一起绑定的,那么也就是说当activity销毁的时候这个service也跟随一起销毁了! 你可以看看 application 这个也挺好使用的 ,可以当做全局的回调对象使用!

‘陆’ android中什么是单例模式

单例模式(Singleton)
一、 什么是单例模式
单例模式,简单点来说就是设计一个类,使其在任何时候,最多只有一个实例,并提供一个访问这个实例的全局访问点。

二、 为什么要单例
在程序中的很多地方,只有一个实例是非常重要的。例如,在windows中,任务管理器只有一个,无论你点击多少次打开任务管理器,任务管理器也只会生成一个窗口。再例如,在一些软件中,工具箱是唯一的,无论你点击多少次打开工具箱,工具箱也只一个。

为什么要这样设计呢?因为像任务管理器或工具箱这样的程序,只要有一个就足够完成所有的工作了,多个程序只会白白消耗系统资源,而像任务管理器这类的程序还会引入多个任务管理器之间的同步问题,所以对些这些程序来说,只有一个实例或程序是必要的。

三、 为什么需要单例模式
上面讲到对于某些程序来说,保持其只有一个实例是必要的,但是如何保证一个程序或一个类只有一个实例呢?下面从类的角度来解说。

‘柒’ 如何使用android单例模式

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;

}

}

‘捌’ 如何完全退出单例模式下的android应用程序,非常好用

首先问题是这样的,比如:我刚进入应用时有一个欢迎页面(E),随后进入主A,我从A->B->C->D,然后直接从D返回到A,在A中完全退出应用。对于android自带的1.5 - 2.1以及2.2之后完全退出应用的API我都试了,但还是实现不了,有的是能退出,但是欢迎页面就没有了,可能是我的原因。 后来我是这样实现的,当然有点老土,但还是能实现的。如下,同样也欢迎拍砖

public class ExitApplication extends Application {
//存储已打开的Activity集合
private List<Activity> list = new ArrayList<Activity>();

//单例的ExitApplication,目的是在任何的Activity中用的都是同一个集合
private static ExitApplication ea;

private ExitApplication(){

}
public static ExitApplication getInstance(){
if(null==ea){
ea = new ExitApplication();
}
return ea;
}

/**
* 添加Activity到集合中
*/
public void addActivity(Activity activity){
list.add(activity);
}

public void exit(Context context){

Dialog dialog = new AlertDialog.Builder(context).setTitle("确认退出")
.setMessage("确定退出该系统?")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
for(Activity activity:list){
activity.finish();
}
System.exit(0);
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}

}).create();
dialog.show();
}
}
我这个必须是单例的,因为我要确保把每个UI都加进一个集合中,所以...,至于对单例有疑问的,可以上网查询,
然后在每个Activity的onCreate方法中调用ExitApplication.getInstance().addActivity(this);,然后在处理退出请求中直接调用ExitApplication.getInstance().exit(this);即可。
转载

‘玖’ android 单例模式 什么时候被杀死 单例的那个对象 什么时候消失啊

我来补充下楼上:
进程关闭的时机是:
1.用Process.kill或者shell去杀死进程
2.系统通过memory策略来杀死后台进程。
说说第二种吧,当程序按Home键或者Back键退出后就变做后台进程。
另外,当程序启动了新的进程。而新的进程进入前台模式,此时程序也变成后台进程。
当前台进程退出,后台进程按照堆栈结构再次呈现时。很可能是个重启进程的过程,重启进程意味着单例对象也重新初始化了。这点要尤其谨慎

‘拾’ android单例中的监听如何回调

1) OnClickListener 接口
此接口处理的是单击事件,例如,在 View 上进行单击动作,在 View 获得焦点的情况下单击“确定”按钮或者单击轨迹球都会触发该事件。
当单击事件发生时,OnClickListener 接口会回调 public void onClick(View v) 方法对事件进行处理。其中参数 v 指的是发生单击事件的 View 组件。
2) OnLongClickListener 接口
此接口处理的是长按事件,当长时间按住某个 View 组件时触发该事件。
其对应的回调方法为 public boolean onLongClick(View v),当返回 true 时,表示已经处理完此事件,若事件未处理完,则返回 false,该事件还可以继续被其他监听器捕获并处理。
3) OnFocusChangeListener 接口
此接口用于处理 View 组件焦点改变事件。当 View 组件失去或获得焦点时会触发该事件。
其对应的回调方法为 public void onFocusChange(View v, Boolean hasFocus),其中参数 v 表示产生事件的事件源,hasFocus 表示事件源的状态,即是否获得焦点。
4) OnKeyListener 接口
此接口用于对手机键盘事件进行监听,当View获得焦点并且键盘被敲击时会触发该事件。
其对应的回调方法为 public boolean onKey(View v, int keyCode, KeyEvent event)。

阅读全文

与android单例相关的资料

热点内容
手机主页设文件夹 浏览:956
安卓投屏极米用什么 浏览:415
老程序员总结的16条经验教训 浏览:194
linux修改服务器时间 浏览:446
检查文件夹新增文件 浏览:287
代理服务器和脚本地址 浏览:529
如何让宽带一直连接网络连接服务器 浏览:718
编译阶段形成逻辑地址 浏览:328
设置中应用加密是哪个 浏览:682
php当前函数名 浏览:161
程序员睡眠不好心跳快 浏览:232
python怎么将电脑作为服务器 浏览:779
腰椎压缩性骨折算几级伤残 浏览:302
传统资产配置策略加密货币市场 浏览:990
id加密门禁卡可以复制到手机吗 浏览:674
路由器如何控制某个app 浏览:45
C51编译器在标准C的基础上 浏览:262
银行卡掉了可以办车贷解压吗 浏览:317
没解压可以贷款吗 浏览:519
最小pdf阅读器 浏览:810