2013-10-27 4 views
1

내 응용 프로그램에서 조각 상태를 저장하려면 SharedPreferences을 사용하고 있습니다. 하지만 사용자가 응용 프로그램 외부로 들어가면 SharedPreferences 안에있는 항목을 삭제하고 싶습니다. 내 메인 클래스에서사용자가 응용 프로그램을 닫을 때 값 삭제

: SM은 내가 만든 헬퍼 클래스의 인스턴스

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    if(isFinishing() == true) 
    { 
     SM.removePreferences(); 
    } 
} 

나는 다음 시도했다. removerPreferences가 수행하는 작업은 다음과 같습니다.

public void removePreferences(){ 
    editor.clear(); 
    editor.commit(); 
} 

그러나이 작업은 실행되지 않았습니다. 로그를 통해 앱이 isFinishing() if 문 안에 들어가는 것을 알았지 만 메소드가 실행되지 않습니다. 나는 또한 onDestroy()을 시도했지만 메서드가 호출되지 않았습니다.

누군가 나를 도울 수 있습니까? 재정의 중지시

+0

'앱이 isFinishing() if 문 내부에 있지만 메소드가 구현되지 않습니다. ' 코드가'if' 블록으로 들어가면 그 메소드가 실행되어야합니다 (MUST). 그것이 당신이 아니라고 말하는 이유는 무엇입니까? BTW, logcat은 이와 같은 문제를 해결하는 좋은 방법이 아닙니다. 대신 디버거를 사용해야합니다. 그것이 바로 그 때문입니다. 또한 공유 환경 설정은 앱을 종료 할 때 삭제할 상태를 저장하는 좋은 방법이 아닙니다. – Simon

+0

당신은 어떻게 저의 저축 상태 일을 제안하겠습니까? 왜냐하면 그것은 나의 최후의 수단 이었기 때문입니다. @ Simon –

+0

"이 저축 상태를 어떻게 할 것이라고 제안합니까?" "주"는 왜 당신이 "저장"하고 있는지, 또는 대답 할 수없는 이유입니다. 그러나 Simon에 동의합니다. 파일에 넣고 싶지 않은 파일에 파일을 넣지 마십시오. – CommonsWare

답변

1

사용은해야 할 일이 같은

:

@Override 
protected void onStop() { 
    // TODO Auto-generated method stub 
    super.onStop(); 
    if(isFinishing() == true) 
    { 
     SM.removePreferences(); 
    } 
} 
0

난 당신이 onSaveInstanceState 메커니즘을 사용하여 달성 할 수 무엇을 찾고 있는지 생각합니다.

그럼에도 불구하고 "메서드가 구현되지 않았습니다."라고 말하면서 특정 질문에 대답하려고합니다. 즉, if 문 값이 항상 false이고 메서드가 호출되지 않는다고 가정하면됩니다.

isFinishing()은 을 Activity으로 호출했거나 다른 사람이 완료하도록 요청한 경우에만 true을 반환합니다. 홈 버튼을 클릭하면 isFinishing() == false이되므로 메서드가 호출되지 않습니다. 따라서 실제로는 Activity을 끝내고 일시 중지하지 말아야합니다.

어쨌든 문제의 원인을 찾아내는 가장 좋은 방법은 디버거를 사용하는 것입니다.

0

Fragment의 인스턴스 상태를 SharedPreferences에 저장하지 말고,이를 수행하기위한 것입니다. 다음과 같이 액세스 할 수 있습니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((savedInstanceState != null) { 
     // get your values, for example: 
     mID = savedInstanceState.getInt("ID"); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    // put your values, for example: 
    outState.putInt("ID", mID); 
} 

이렇게하면 값을 직접 관리 할 필요가 없습니다.

사용자 지정 개체가있는 경우 Parcelable을 구현할 수 있습니다.

대조적으로 SharedPreferences은 응용 프로그램이 닫힌 후에도 유지해야하는 값, 즉 환경 설정을 저장합니다.

+0

이 메서드를 사용하는 것에 대해 눈치 챘지만 꼭 호출해야하는 것은 아닙니다. –

+1

그런 다음 특정 문제에 대한 다른 질문을 게시해야합니다. – Terry

0

더 나은 위치는 if 문 없이는 onDestroy()입니다.
그러나, 당신은()들의 OnDestroy에 대한 안드로이드 문서에서 읽을 수 :

이 시스템이 단순히이 방법 (또는 다른 사람)를 호출하지 않고 활동의 호스팅 프로세스를 죽일 상황, 그래서 그것을해야 과정이 끝난 후에도 주변에 남을 일을하는 데 익숙하지 않아야합니다.

제 생각에는 활동이 끝난 후에도 데이터가 남지 않게하려면 클래스를 사용해야합니다.

관련 문제