2011-03-31 6 views
0

일반적으로 응용 프로그램을 닫을 때 내 부울에 true를 추가로 onStartCommand를 사용하여 안전하게 종료하라는 신호를 보냅니다. 내 응용 프로그램 클래스 'onTerminate'에서이 작업을 수행합니다. 이 블록에서 응용 프로그램을 닫을 때 nullptrexception을 얻었 기 때문에 if 문을 추가했습니다. 강제 종료가가가는 .. 더 나은/더 안전한 방법이 있나요 무슨 정확하게 볼 어렵게 디버거를 끊 것을안드로이드는 스레드로 예외를 닫습니다.

static final int DELAY = 2000; 
public void run() { 
    while (mIsRunning) { 
     if (!mJobQueue.isEmpty()) { 
      //do work 
     } 
     else if (mSafeShutdown) { 
      mIsRunning = false; 
      stopSelf(); 
     } 
     else { 
      sleep(DELAY); 
     } 
    } 
} 

사실 - 그러나

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    if (intent != null) { 
     boolean state = intent.getBooleanExtra("terminate", false); 
     mSafeShutdown = state; 
    } 
    else if (mUpdater != null && mUpdater.isRunning()) { 
     Log.d(TAG, "activity force closed?" + 
      " Attempting to handle service thread shutdown safely..."); 
     mUpdater.isRunning(false); 
     try { 
      mUpdater.join(); 
     } catch (InterruptedException e) { 
      Log.e(TAG,"Service's UpdaterThread couldn't join"); 
     } 
    } 
    return START_STICKY; 
} 

이 내 서비스가 살아 남기 위해 원인 내 서비스 스레드에게 응용 프로그램이 종료되었음을 알리는

+0

"나는 내 응용 프로그램 클래스 '들의 OnDestroy에서 이렇게"... 당신은 나에게 다른 문서가 없다면, 안드로이드 응용 프로그램 클래스는들의 OnDestroy() 메소드가 없습니다 . 또한 왜 강제 폐쇄입니까? – Squonk

+0

@MisterSquonk : 말하자면, 말하기가 잘못되었습니다. 많은 사람들이 배터리 수명을 많이 절약한다고 생각하여 응용 프로그램을 강제 종료하려고합니다. 나는 사회가 생각하는 방식에 책임이 없다! –

답변

1

스레드가 하위 클래스이므로 스레드를 종료하고 상위 클래스에서 호출하는 메서드를 만듭니다.

예는 여기에서 찾을 수 있습니다 http://download.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

+0

나는 mSafeShutdown을 서비스 대신에 updaterThread의 멤버로 만들었습니다. 그러나 내가 돌아가서 정리할 때 정보를 수정해야하기 때문에이 기사를 즐겨 보았습니다. 감사. –

관련 문제