2012-11-28 2 views
0

내 응용 프로그램이 스레드를 생성하는 서비스를 시작합니다. 스레드는 5 초마다 폴링을 수행합니다. 안드로이드는 내 서비스가 맞는 것처럼 다시 시작할 수 있습니다. 서비스가 다시 시작될 때 기존 폴링 스레드를 사용할 수 있도록 폴링 스레드를 저장하려고합니다.서비스가 다시 시작될 때 개체의 상태를 저장하는 방법

다음은 onStartCommand() 메소드의 :

전달 된 인 텐트 오브젝트가 null의 경우,이 서비스가 그래서 성공적으로이 시나리오를 감지 할 수 restartedm왔다 의미 것으로 보인다
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    if(intent == null) 
    { 
     Log.d("screener", "onStartCommand was called with null intent. System must've killed and restarted service...?"); 
    } 
    else 
    { 
     processToMonitor = intent.getStringExtra("com.screener.processToMonitor"); 
     Log.d("screener", "onStartCommand was called"); 

    } 

    if(pollThread == null) 
    { 
     poller = new Poller(this, wakeLock, processToMonitor); 
     pollThread = new Thread(poller); 
     pollThread.start(); 
     Log.d("screenon", "polling thread was not already running. Going to start it"); 
    } 
    else 
    { 
     Log.d("screener", "polling thread has already been running. Not going to restart it"); 
    } 

    return START_STICKY; 
} 

. 저장하려는 객체는 poller (또는 pollerThread가 poller를 캡슐화 함)입니다. 나는 그것이 작동하지 않는 정적으로 만들려고 노력했다. 나는 또한 Application을 overrode하고 거기에 인스턴스를 저장했지만, 여전히 지속되지는 않습니다.

그래서 서비스가 다시 시작될 때 개체를 어떻게 저장합니까? 또는 Android가 모든 것을 정리하고 스레드를 다시 시작한다는 사실을 인정합니까?

+0

귀하의 프로세스가 죽으면 서비스가 다시 시작되며 이는 스레드가 사라지는 것과 일치합니다. – njzk2

+0

좋아, 그래서 경우에도 응용 프로그램 개체가 재현되지 않습니다 그래서 거기에 저장 장치가 아닌 개체를 저장할 수있는 기회가 없어? – barry

+0

아니, sdcard를 사용하여 파일로 저장하거나'SharedPreferences'를 사용하십시오. – Leandros

답변

0

왜 스레드를 저장 하시겠습니까? "죽게"하고 서비스가 다시 시작되면 새 폴러 스레드가 시작됩니다.

+0

글쎄, 나는 그것이 죽을 것이라는 것을 확실히 알지 못했고, 원래의 것이 이미 실행 중이었다면 다른 것을 시작하고 싶지 않았다. – barry

관련 문제