2012-02-07 4 views
1

싱글 톤을 작성하여 여러 프로세스를 처리하려면 어떻게해야합니까? 가능한가? 예를 들어 Android의 원격 서비스에서 작동하는 코드가 있습니다. 어떻게이 목적을 위해 싱글 톤을 쓸 수 있습니까?여러 프로세스를 통한 싱글 톤?

+0

질문이 제대로 표시되지 않습니다. – Lucifer

+0

Android에서 여러 프로세스에 대해 Singleton 클래스를 작성할 수 있습니까? – user1074896

+0

http://groups.google.com/group/android-developers/browse_thread/thread/abe59add03ae4ce3 하지만 단 하나의 싱글 톤이 있어야합니다. 가능합니까? – user1074896

답변

-2
public enum MySingleton { 
    SOLE; 
    //all class stuff 
} 

이 문자는 단순히 작성되고 게으른 스레드로부터 안전합니다. 직접 MySingleton.SOLE을 사용하거나 다른 변수에 넣을 수 있지만 모두 하나의 인스턴스에 대한 참조 일뿐입니다. 원하는만큼 많은 프로세스에서 사용할 수 있습니다. 그것은 Effective Java, Second Edition

에서 사용하는 글로벌 데이터에 관해서입니다,

그건 내 생각이 아니다 (안드로이드 프로세스가 스레드가 정말) (질문에 그 요구 사항을 넣어주세요), 당신은 모든 곳에서 MySingleton.SOLE에 도달 할 수 있습니다. 정적 상수는 전역 적입니다. 물론 이름이 너일거야.

물론 해결 방법이 있습니다. 클래스 로딩을 통해이 싱글 톤을 속일 수 있습니다.

스레드가 아닌 여러 개의 다른 작업에 대해 하나의 인스턴스를 갖고 싶다면 Hybild 나 다른 ORM 개체로 singleton 빌드가 쉬운 솔루션이 될 것입니다. 모든 프로세스는 동일한 테이블에서 동일한 데이터가있는 동일한 행을 보게됩니다. 그러나 나는 당신의 과업이 과도하다고 생각합니다.

+2

여러 프로세스에서 사용할 수있는 싱글 톤을 만들려면 클래스가 필요합니다. 하지만 내 싱글 톤의 getInstance() 메서드를 호출하면 내 싱글 톤의 새 인스턴스를 얻게됩니다 – user1074896

+0

제발 내 대답을주의 깊게 읽으십시오. 그것은 수업이 아니에요, enum입니다! SOLE의 두 번째 인스턴스를 만드는 것은 절대 불가능합니다. – Gangnus

+0

클래스가 열거 형이 아닌 Singleton이되어야합니다. 일부 글로벌 데이터를 열거 형에 저장하려면 어떻게합니까? 사전에 감사드립니다. – user1074896

3

이 스레드는 오래지만, 현재 허용 대답은 잘못된 어떤 사람들 오해의 소지가 있습니다를 참조하십시오.

Android의 서비스는 앱과 동일한 프로세스 또는 다른 프로세스에서 모두 실행될 수 있습니다.

내부 용으로 자신의 앱에서 정의한 서비스 인 경우 동일한 프로세스에서 실행되고있을 가능성이 큽니다. processattributes on the Manifest 중 하나를 설정하지 마십시오. 이 경우 서비스는 주 스레드 또는 일부 백그라운드 스레드에서 작업을 실행하고 나머지 단일 응용 프로그램과 동일한 단일 인스턴스를 공유합니다.

이 서비스가 별도의 프로세스 또는 별도의 응용 프로그램에서 실행되는 진정한 원격 서비스 인 경우 달성하려는 대상은 훨씬 더 어렵습니다. 각 프로세스는 자체 싱글 톤 인스턴스를 가지며 서로 전혀 관련이 없습니다. 이것은 다른 프로세스가 동일한 버전의 코드를 실행하지 않을 수도 있다는 것을 알게되면 완벽하게 이해할 수 있습니다.

실제로 프로세스간에 공통된 개체가 있기를 원한다면 (힌트 : 거의 확실하지 않음) 데이터에 대한 공유 메모리 공간을 만들고 동기화 수단을 구현해야합니다. 나는 에 대해 전체 대학 강의가 있다고 확신하는데, 그 대상은입니다.