2011-12-26 4 views
2

2 가지 프로세스가 관련된 내 앱을 사용하는 데 실제 문제가 있습니다. 하나의 프로세스가 서비스 (p1)를 실행하고 다른 프로세스는 GUI (p2)를 실행합니다.다중 프로세스 글로벌 변수를 사용할 수 있습니까?

사용자 정의 메모리 관리 (및 정적) 객체 (iThing)의 사용을 구현하는 p2 클래스가 있습니다. 그가 원할 때마다 전망을 파괴하는 안드로이드 OS 구현의 이런 bacause와 같아야합니다.

public class Connections{ 
    public static int iGlobalCounter=0; 
    public static Object iThing; 

    public static void start(){ 
     iGlobalCounter++; 
     Log.d("PROCESS", "UP: "+iGlobalCounter); 
     if (iGlobalCounter<=1){ 
      //Create the object "iThing" 
     } 
    } 

    public static int stop(){ 
     iGlobalCounter--; 
     Log.d("PROCESS", "DOWN: "+iGlobalCounter); 
     if (iGlobalCounter<=0){ 
      //Destroy the object "iThing" 
     } 
    } 

} 

주요 GUI (P2)에, 시작과에 변수를 중지에서 onCreate /들의 OnDestroy (P1)에 마지막으로

public class MyMainClass extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Connections.start(); 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     Connections.stop(); 
    } 

} 

나는 또한 서비스를 가지고 (내 응용 프로그램의 모든보기에 대한) 변수를 필요로하므로, 그렇습니다 같은

public class MyMainService extends Service{ 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Connections.start(); 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     Connections.stop(); 
    } 

} 

문제는 난 단지 P2 (GUI)를 사용하는 경우, 그것은 잘 간다,하지만 난 (P1에서) 서비스를 실행할 때, 카운터가 '아무튼이다 마지막 상태에서 증가하지만 0부터 결과적으로 앱이 아닌 서비스를 떠날 때 객체가 파괴됩니다. 이 탐색을 할 경우

, 나는 다음과 같은 카운터를 얻을 : -> OtherClass (2) -> AnotherClass (3) - MyMainClass (1)>MyMainService (1)

내 문제는 다중 프로세스 전역 변수를 갖는 방법이 있는지 여부입니다. 모든 프로세스가 자체 정적 변수를 사용하고 "실제 정적"이 아닌 것처럼 보입니다. 솔루션은 SharedPreferences를 사용하여 상태를 저장하지만 앱을 종료 할 때 저장되지 않기 때문에 정말 좋은 솔루션은 아닙니다.

감사합니다, 포

답변

1

난 당신이 Application 클래스를 확장하고 거기 globalVariable을 넣어해야한다고 생각합니다.

+0

죄송합니다, 방금 시도했지만 동일한 현상이 계속 발생합니다 : 인스턴스 두 프로세스 – Corbella

+0

어쩌면 티에 동시성의 예를 볼 수 있습니다. Application 클래스의 GlobalVariable을 정적으로 만들고 동기화 된 업데이터를 작성하십시오. – Yury

0

공유 메모리에 전체 데이터를 저장할 수 있습니다 (MemoryFile 참조). 파일에 대한 액세스를 동기화하려면 가장 좋은 방법은 동일한 메모리 파일을 사용하는 일종의 스핀 록을 구현하는 것입니다. 및 경우, 나는 이것을하는 간단한 방법을 모른다.

0

당신은

메모리 명명 된 파이프에있는 파일

WCF를 매핑 서로 다른 프로세스간에 데이터를 공유하기 위해 조사 할 수있는 다음과 같은 옵션이,

메시지 큐,

명명 된 파이프를 가지고 또는 MSMQ

관련 문제