Java 意向服务单例
我想实现一个Java 意向服务单例,java,android,singleton,Java,Android,Singleton,我想实现一个服务,它的作用类似于单例 我需要我的应用程序检查屏幕是否被锁定,然后启动一个监听器IntentService。如果屏幕解锁,它将关闭侦听器服务。 我创建了一个ScreenLockService,这是一个IntentService,如果用户选中了开/关框,则会被主页活动调用,因为我希望侦听器即使应用程序未运行也能运行 因此,Home活动运行并停止ScreenLockService服务,该服务将运行并停止Listener服务 我的问题是主页活动创建了屏幕锁定服务的多个实例,这也创建了侦听
服务
,它的作用类似于单例
我需要我的应用程序检查屏幕是否被锁定,然后启动一个监听器IntentService
。如果屏幕解锁,它将关闭侦听器
服务。
我创建了一个ScreenLockService
,这是一个IntentService
,如果用户选中了开/关框,则会被主页
活动调用,因为我希望侦听器
即使应用程序未运行也能运行
因此,Home
活动运行并停止ScreenLockService
服务,该服务将运行并停止Listener
服务
我的问题是主页
活动
创建了屏幕锁定服务
的多个实例,这也创建了侦听器
的多个实例
所以我想让这两个intentservice
作为singleton
运行,但我不确定如何做到这一点
我已经查阅了一系列教程,但它们要么过时,要么不适合IntentService,例如:
如果必要的话,我可以发布一些我所拥有的示例代码,但我真正想要的是一个操作指南 实现单例模式的基本思想是创建一个私有(或受保护)构造函数(这意味着它不能从类外部访问)。该类还需要一个自己类型的私有字段(例如,private MyClass myObj
;),接下来需要的是一个名为newInstance()
的公共静态方法,该方法通过myObj
返回类的实例,如果该实例不为空,则实例化它:
public static MyClass newInstance(){
if (myObj == null) {
myObj = new MyClass();
}
return myObj;
}
当然,它可以有一个更复杂的实现(构造函数不必没有参数)
现在,这将始终只创建所需类的一个实例。您需要做的就是始终在需要使用类的地方调用方法newInstance
。如果它已经被实例化,它将为您提供旧实例,如果没有,它将创建它
希望这就是您想要的解释。a服务
是一个单例:您不能有两个相同的服务实例
您是否在活动的暂停和恢复中停止和启动服务?@Pablo No,我正在创建ScreenLockService
意图,并在Home
活动的onCreate中启动它。然后,如果屏幕被锁定,我将启动侦听器
服务。@pskink也许我的意思不同。当我调试和监视线程(每个服务中创建一个)时,我分别将其命名为ScreenLockService
和Listener
,当我只需要一个线程处于活动状态时,就会看到多个同名线程弹出。我可以这样做,但也许我需要一种方法使线程成为一个单例,而不是服务类?对不起,没有你的代码,我不知道你的意思。这个答案解释了如何实现java单例(通常)。问题是关于将Android服务实现为singleton。可能是同样的方式,我不明白为什么会有不同。就像@pskink所说的,你不能有两个相同服务的实例。@Vucko感谢你的回答,但我将研究线程的singleton,而不是我认为pskink和Pablo是正确的服务。然而,我的问题仍然是如何生成多个线程。默认情况下,一个服务作为一个单线程工作。如果服务正在运行,则无法创建另一个实例。