2011-02-06 9 views
2

핸들러 onCreate의 내 액티비티는 인 텐트에서 값을 가져 와서 무언가를 실행합니다.배경에서 복구 한 후이 활동이 시작될 의도를 업데이트하는 방법은 무엇입니까?

protected void onCreate(Bundle b){ 
    .... 
    Intent i = getIntent(); 
    if (i.hasExtra("value")){ 
     String val = i.getStringExtra("value"); 
     doSomethingWithValue(val); 
    } 
} 

내 액티비티에는 매니페스트에 android:launchMode="singleTask" 속성이 있습니다. doSomethingWithValuedoSomethingWithValue을 실행 한 후 "value"을 인 텐트에서 지우고 싶습니다. 다음 번에 활동이 백그라운드에서 복구 될 때 의도가 반환되었지만 getIntent()"value"을 추가해서는 안됩니다. onCreate의 다음 실행을 위해이 값을 어떻게 지울 수 있습니까? setIntent는 여기서 작동하지 않습니다.

다른 말로하면 다시 버튼을 누른 다음 내 응용 프로그램 doSomethingWithValue(val)로 돌아가서 다시 실행되지만 나는 이것을 필요가 없습니다.

+0

동일한 문제가 발생합니다. 솔루션을 찾을 수 있었다면 알려 주시기 바랍니다. –

답변

1

인 텐트가 변경 될 수 있는지 여부는 모르겠지만 개념은 나에게 잘못되었습니다 (활동을 시작한 모든 인 텐트가 변경되지 않았 음).

나는 doSomethingWithValue()의 성공적인 실행을 속성, 예를 들어 mSomethingDone에 저장하도록 제안합니다. 시스템 (사용자가 아닌)이 작업을 취소하면 onRetainNonConfigurationInstance가 호출됩니다.

@Override 
public Object onRetainNonConfigurationInstance() { 
    return mSomeThingDone; 
} 

지금 당신의에서 onCreate에서 부울 검색 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    final Object data = getLastNonConfigurationInstance(); 
    if (data != null) { 
    mSomeThingDone = (Boolean)data; 
    } 
} 

을 그리고 당신은 mSomeThingDone의 값에 따라 당신의 doSomethingWithValue를 실행해야하는 경우 다음 확인이를 구현합니다.

+0

이러한 접근 방식은 앱을 홈 버튼으로 배경으로 이동할 때 작동하지만 뒤로 버튼으로 앱을 배경으로 이동하면 이전과 같이 동작이 잘못됩니다. – Solvek

+0

여기에서 활동주기 (http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle)를 고려해야합니다. 앱이 백그라운드로 들어갈 때 앱이 거의 파괴되지 않습니다. 그들이 파괴되지 않으면, onCreate는 포 그라운드로 다시 보내질 때 호출되지 않습니다. onCreate, onResume 및 onStart에 Log 문을 추가하여 로깅 생성, 이벤트 재개 및 시작을 제안합니다. 문제가 나타나면 onCreate가 호출되는지 확인하십시오. –

관련 문제