답변

1

Activity.onRetainNonConfigurationInstance() 및 연관된 getLastNonConfigurationInstance() 메소드를 살펴보십시오. 사용 가능할 수 있습니다.

+0

나는 그것을 사용하고 있지만 그것을 통해 나를 안내하는 데 도움이되는 패턴을 찾고 있습니다. 이 모든 특별한 경우를 고려하여 앱을 유지하기가 쉽지 않은 많은 복잡성이 있습니다. –

+0

그래도 질문은 '오리엔테이션 변경을 통해 ServiceConnection 유지하기'에 관한 것이지만 질문 제목이나 질문 자체는 '복잡함'이나 '특별한 경우에 대한 고려 사항'을 언급하지 않습니다. 코드 작동 방식에 대한 예제를 제공하지 않았으므로이 질문에 대답하기가 어렵습니다. – Squonk

-2

매니페스트의 activity 속성에 android : configChanges = "orientation"을 사용합니다.

+0

이 접근법은 권장되지 않습니다. http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange –

1

불행히도 onRetainNonConfigurationInstance/getLastNonConfigurationInstance를 사용하면 누수가 발생할 수 있습니다.

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     mServiceMessenger = new Messenger(service); 
     mConnectedToService = true; 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mConnectedToService = false; 
     mServiceMessenger = null; 
    } 
}; 

mServiceMessenger 날 보낼 수있는 메신저의 인스턴스입니다 : 내 경우 (I 원격 서버에 파일을 업로드 할 IntentService를 사용)에서 , 나는 같은 것으로 간주 활동에서 내 연결을 선언했다 업로드 작업 취소 주문.

그럼에도 불구하고 onRetainNonConfigurationInstance 및 getLastNonConfigurationInstance를 사용하여 솔루션을 테스트했을 때 Eclipse에서 MAT 플러그인 덕분에 화면 회전에 내 Activity 컨텍스트가 많이 누출되는 것을 추적했습니다.

내 응용 프로그램의 복잡성으로 인해이 문제를 해결하기 위해 IntentService (및 내 Activity와의 통신)에 대한 연결을 처리하는 데 필요한 모든 요소를 ​​그룹화하여 단일 그룹으로 만들었습니다. 따라서 스크린을 회전시킬 때 생성 된 새로운 액티비티는 싱글 톤이 관리하는 연결을 되찾아 정보를 잃지 않고 사용할 수 있습니다.