Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 意向服务单例_Java_Android_Singleton - Fatal编程技术网

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是正确的服务。然而,我的问题仍然是如何生成多个线程。默认情况下,一个服务作为一个单线程工作。如果服务正在运行,则无法创建另一个实例。