2016-05-31 1 views
2

Singleton처럼 작동하는 Service을 구현하고 싶습니다.의도 서비스 싱글

화면이 잠겨 있는지 확인하려면 내 앱이 필요하고 ListenerIntentService을 시작하십시오. 화면이 잠기지 않으면 Listener 서비스가 중지됩니다. Listener을 실행하고 싶어도 사용자가 켜기/끄기 상자를 선택하면 IntentServiceScreenLockService이 생성되고 Home 작업이 호출됩니다.

따라서 활동은 Listener 서비스를 실행하고 중지하는 ScreenLockService 서비스를 실행 및 중지합니다.

내 문제는 HomeActivityScreenLockService의 여러 인스턴스를 만들고 Listener의 여러 인스턴스를 생성한다는 것입니다.

그래서이 두 IntentServicesSingletons으로 실행하고 싶습니다. 그러나 그렇게하는 방법은 확실하지 않습니다. , http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/ Singleton in Android

내가 필요하면 내가 가지고있는 몇 가지 예제 코드를 게시 할 수 있습니다 : 같은 IntentServices에 맞는

나는 자습서의 무리를 체크 아웃했지만, 그들은 하나 구식있어 여부 하지만 내가 정말로 찾고있는 것은 방법입니다.

+4

'서비스'는 싱글 톤입니다 : 동일한 '서비스'의 두 인스턴스를 가질 수 없습니다. – pskink

+0

onPause에서 서비스를 중지했다가 다시 시작 하시겠습니까? – Pablo

+0

@Pablo 아니요, 'ScreenLockService'인 텐트를 만들고 'Home' 액티비티의 onCreate에서 시작합니다. 그런 다음 화면이 잠겨 있으면 Listener 서비스를 시작합니다. – Ausche

답변

2

싱글 톤 패턴 구현의 기본 개념은 private [또는 protected] 생성자를 만드는 것입니다. 즉, 클래스 외부에서 액세스 할 수 없습니다. 그 클래스는 또한 자신의 타입의 private 필드를 필요로합니다 (예를 들어 private MyClass myObj;) 다음으로 필요한 것은 null이 아닌 경우 myObj을 통해 클래스의 인스턴스를 반환하는 newInstance()과 같은 public static 메소드입니다.

public static MyClass newInstance(){ 
    if (myObj == null) { 
     myObj = new MyClass(); 
    } 
return myObj; 
} 

물론 복잡한 구현 (매개 변수가없는 생성자) 일 수 있습니다.

이제 항상 원하는 클래스의 인스턴스를 하나만 만듭니다. 당신이해야 할 일은 언제든지 클래스를 사용해야하는 곳에 newInstance 메서드를 호출하는 것입니다. 이미 인스턴스화 된 경우 이전 인스턴스를 제공하고 그렇지 않은 경우 이전 인스턴스를 생성합니다.

희망 사항입니다.

+0

이 답변은 (일반적으로) 자바 싱글 톤을 구현하는 방법을 설명합니다. 문제는 Android Servicies를 싱글 톤으로 구현하는 것이 었습니다. – Pablo

+0

아마 같은 방식으로, 왜 다른지는 모르겠다. – Vucko

+0

@pskink와 마찬가지로 동일한 서비스의 인스턴스가 두 개있을 수 없습니다. – Pablo

관련 문제