나는 ServiceConnection을 서비스에 포함하는 Activity가있다. 방향이 바뀌면 ServiceConnection이 손실되어 다시 만들어집니다.오리엔테이션 변경을 통해 안드로이드에서 ServiceConnection 유지
바람직하지 않습니다. Activity의 레크리에이션을 통해 ServiceConnection이 유지되도록하고 싶습니다. 나는이 문제를 해결하는 좋은 패턴을 찾고있다.
나는 ServiceConnection을 서비스에 포함하는 Activity가있다. 방향이 바뀌면 ServiceConnection이 손실되어 다시 만들어집니다.오리엔테이션 변경을 통해 안드로이드에서 ServiceConnection 유지
바람직하지 않습니다. Activity의 레크리에이션을 통해 ServiceConnection이 유지되도록하고 싶습니다. 나는이 문제를 해결하는 좋은 패턴을 찾고있다.
Activity.onRetainNonConfigurationInstance() 및 연관된 getLastNonConfigurationInstance() 메소드를 살펴보십시오. 사용 가능할 수 있습니다.
매니페스트의 activity 속성에 android : configChanges = "orientation"을 사용합니다.
이 접근법은 권장되지 않습니다. http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange –
불행히도 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와의 통신)에 대한 연결을 처리하는 데 필요한 모든 요소를 그룹화하여 단일 그룹으로 만들었습니다. 따라서 스크린을 회전시킬 때 생성 된 새로운 액티비티는 싱글 톤이 관리하는 연결을 되찾아 정보를 잃지 않고 사용할 수 있습니다.
나는 그것을 사용하고 있지만 그것을 통해 나를 안내하는 데 도움이되는 패턴을 찾고 있습니다. 이 모든 특별한 경우를 고려하여 앱을 유지하기가 쉽지 않은 많은 복잡성이 있습니다. –
그래도 질문은 '오리엔테이션 변경을 통해 ServiceConnection 유지하기'에 관한 것이지만 질문 제목이나 질문 자체는 '복잡함'이나 '특별한 경우에 대한 고려 사항'을 언급하지 않습니다. 코드 작동 방식에 대한 예제를 제공하지 않았으므로이 질문에 대답하기가 어렵습니다. – Squonk