2011-08-12 3 views
0

응용 프로그램이 끝날 때 약간의 문제가 있습니다. 매개 변수를 데이터베이스에 저장하고 서버에 최종 연결하는 것과 같은 onDestroy 작업을 수행해야합니다.데이터를 영구적으로 유지하고 서버와 동기화하기위한 onDestroy

코드가 onDestroy에 삽입되면 방향이 바뀔 때 문제가 발생한다는 것입니다.

해당 활동의 목록에 가로/세로 레이아웃이 바뀌지 않습니다. 그리고

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.main); 
} 

를 추가하면 레이아웃을 변경하지만 버튼과 라벨은 onClickListeners을하지 않는 텍스트가 올바르게 레이블을 지정합니다. 어떻게 해결할 수 있습니까? 감사합니다.

+0

onDestroy()에서 isFinishing()을 사용하여 활동이 완료되었는지 확인할 수 있습니다. – Ronnie

답변

2

onCreate() 함수에서 레이아웃 항목을 초기화했기 때문에 레이아웃 항목이 다시 초기화되지 않아 문제가 발생하고 새로운 레이아웃 인 에 중단됩니다.

하나의 옵션은 초기화를 onCreate()과 모두에서 호출되는 새 함수로 이동하는 것입니다.

또 다른 옵션은 레이아웃에서 android:onclick="" (및 관련) 속성을 사용하는 것입니다.

내가 선택할 수있는 옵션은 다르지만. 안드로이드가 오리엔테이션을 관리 할 수있게하고 (onDestroy()) onDestroy()에 10 초 (예 : onCreate()이 다시 호출되도록하는 시간)라고하는 알람을 설치합니다. onCreate()에서 나는 경보를 취소 할 것이다. 알람이 울리면 저의 구원 활동을 수행 할 것입니다.

+0

답장을 보내 주셔서 감사합니다.알람은 나머지 부분을 관리하기 위해 안드로이드를 떠나기위한 최상의 옵션 인 것 같습니다. 어떻게 구현해야합니까? 어쩌면 핸들러와 지연 포스트/removecallbacks? – Addev

+0

http://www.androidcompetencycenter.com/2009/02/android-basics-alarm-service/를 설치하면 알람이 만료 될 때 방송을 수신 할 의도 (PendingIntent, 실제로)를 지정하므로 의사 결정 이미 당신을 위해 꽤 많이 만들어졌습니다. 알람이 만료되기 전에 활동이 파손 된 경우를 대비해서 활동을 초과하여 저장하려는 데이터를 준비해야합니다 (http : // trace 참조). adityalesmana.com/2010/08/declare-global-variable-in-android-via-android-app-application/). – mah

1

단추 및 레이블을 클래스 변수로 선언하십시오.

+0

그는 setContentView()를 다시 호출 했으므로 작동하지 않을 것입니다. 클래스 변수는 더 이상 존재하지 않는 레이아웃 항목을 가리 키기 때문에 오래된 것입니다. – mah

1

setContentView은보기를 다시 생성하므로 데이터를 리 바인드해야합니다. 가장 좋은 방법은 onCreate()와 onConfigurationChanged()에서 레이아웃 생성 및 바인딩과 함께 호출되는 함수입니다.

1

오리엔테이션 변경 사항이 발생했을 때 아무 것도 일어나지 않으려면 setContentView()을 다시 입력해야합니다. 기본적으로 앱에 "방향이 바뀌면 아무 것도하지 마라"라고 말하고 있습니다. 따라서 안에있는 setContentView을 제거하거나 현재 방향이 활성화되어 있는지 테스트 한 다음 원하는 레이아웃 리소스를로드하십시오.

변경 사항이 전체 활동을 다시 시작하기 때문에 방향이 바뀌면 onDestroy()이 호출됩니다.

더 여기 읽기 : http://developer.android.com/guide/practices/screens_support.html#qualifiers http://developer.android.com/guide/topics/resources/providing-resources.html

방향 테스트 : Setting the background of an Activity

1

당신이 활동의 ​​오버라이드 (override) finish()에서 그 물건을 할 수 있습니까?

+0

finish()는 콜백이 아니므로 사전에 액티비티가 완료되었음을 알리기 위해 호출 할 수있는 메서드입니다.하지만 액티비티가 사라지는 유일한 방법은 아닙니다. – mah

관련 문제