2017-11-25 5 views
1

나는 초보자 Android 개발자입니다. 화면 방향이 바뀌면 Activity가 다시 생성되고 onCreate()이 다시 호출된다는 것을 알고 있습니다. 그러나 온라인에서 찾을 수 없었던 것은 원래 활동이 얼마나 정확하게 파괴되었는지입니다. onCreate()에 의해 호출 된 일부 코드가 실행 중일 경우 해당 코드가 멈추는 지, 아니면 화면을 회전하기 전에 코드가 끝날 때까지 시스템이 대기하고 onCreate()을 다시 호출합니까? 감사.화면을 돌릴 때 Android 활동을 어떻게 재 작성합니까?

+0

내 대답에 만족하셨습니까? 그래도 더 자세한 내용을 원한다면 아래에 댓글을 달아주세요 ...! 또는 아무것도 이해하지 못했다면! – Xenolion

답변

0

오리엔테이션이 바뀔 때마다 Activity의 onCreate()가 호출되며 시스템이 대기하지 않기 때문에 비동기 작업을 처리해야하지만 AndroidManifest에 Activity의 configChanges 속성을 추가하여 Activity를 다시 만들지 않아도됩니다 활동 태그에있는 파일. 장치 회전이 감지되거나 활동이 처음 시작되면 official documentation on configuration changes에 따르면

android:configChanges="keyboardHidden|orientation "

+0

"시스템이 대기하지 않기 때문에 비동기 작업을 처리해야합니다": UI 스레드에서 실행중인 동기 작업에 대해 이야기하고 있습니다. –

+0

ui 스레드에서 태스크를 실행하지 않아야합니다. :) – diegoveloper

0

는,에서 onCreate()가 호출되고, 모든 의도와 목적에서 onCreate에 대한 것을 가정한다() 메서드는 다른 화면 로테이션이 활동 레크 리 에이션을 트리거하기 전에 실행을 완료합니다. onCreate()에서 실행 된 코드는 UI가 차단되어서는 안되기 때문에 즉시 수행해야합니다.

-1

화면을 회전 할 때 구성 변경 화면 방향, 키보드 사용 가능 여부 및 언어 변경과 같은 상황이 포함됩니다. Android 공식 여기에 설명서가 onDestroy()이면 onCreate()이라고합니다.

일부 장치 구성은 런타임 (예 : 화면 방향, 키보드 가용성 및 언어) 중에 변경 될 수 있습니다. 이러한 변경이 발생하면 Android는 실행중인 작업을 다시 시작합니다 (onDestroy()가 호출 된 다음 onCreate()가 호출 됨).

그러나이 주 스레드에서 실행 코드 완료해야합니다 (다른 스레드가 아닌)이었고, 안드로이드는 당신에게 활동을 다시 시작할 때 당신이 onCreate()에받을 수있는 활동 데이터를 저장하는 시간을 제공합니다. 설명서에서 여기에 설명 된대로 onSaveInstanceState() 메서드를 호출하여 메서드를 호출하면됩니다.

, 당신이 응용 프로그램 상태에 대한 데이터를 저장할 수 있도록 그것은 당신의 활동을 파괴하기 전에) 당신의 활동이 안드로이드 onSaveInstanceState를 (호출하는 정상적인 활동의 라이프 사이클을 통해 이전 상태를 복원하는 것이 중요합니다

제대로 다시 시작을 처리하려면 . onCreate() 또는 onRestoreInstanceState() 동안 상태를 복원 할 수 있습니다.

그래서 코드의 전체적인 문제는 주 스레드에서 실행 중이면 코드가 완료 될 때까지 기다릴 것이고 코드가 너무 느려지면 구성 변경이 매우 느리게 진행될 수 있습니다 (예 : http requests) 주 스레드에서 거대한 작업을 수행하기 위해 설명서에서 권장하지 않습니다.

이 전체 답변과 설명 및 따옴표는 Android Official Documentation Guide에서 가져 왔으므로 참조 용으로 구성 변경 사항에 대한 설명을 참조하십시오.