>Java >java지도 시간 >Android 활동 가로 및 세로 화면 전환 수명 주기

Android 활동 가로 및 세로 화면 전환 수명 주기

高洛峰
高洛峰원래의
2017-01-07 15:55:532117검색

머리말

개발 중에 가로, 세로 화면 전환을 처리해야 하는 경우가 종종 있는데 이를 어떻게 먼저 처리해야 하는지는 라이프사이클에 따라 다릅니다.

선언

Activity 가로 화면과 세로 화면 전환 시 두 가지 기능을 콜백해야 하므로 이 두 기능은 일시적으로 Activity 가로 세로 화면 전환 Life Cycle의 일부로 간주됩니다.

onSaveInstanceState(Bundle outState) :Activity 即将销毁时保存数据
onRestoreInstanceState(Bundle savedInstanceState) : Activity 重建或者恢复时候取出数据

수평 및 수직 화면 전환 라이프 사이클

1. 프로그램을 시작하고 액티비티 인터페이스로 들어갑니다.

Android Activity 横竖屏切换的生命周期

2. 화면 회전

Android Activity 横竖屏切换的生命周期

3 , 화면 다시 회전

4

android:configChanges="orientation|screenSize"를 설정 AndroidManifest.xml. 화면 전환은 각 수명 주기를 다시 호출하지 않고 onConfigurationChanged 메서드만 실행합니다

Android Activity 横竖屏切换的生命周期

참고:

MiniSdkVersion은 또는 13과 같음: android:configChanges="orientation" 또는 android:configChanges="orientation|keyboardHidden" 각 수명 주기 호출

MiniSdkVersion이 13보다 작은 경우:

(1) android가 :configChanges가 설정되지 않은 경우, 화면 전환 시 각 Life Cycle이 다시 호출됩니다. 가로 화면 전환 시 한 번, 세로 화면 전환 시 한 번 실행됩니다.

(2) 액티비티의 android:configChanges="orientation"을 설정하면 화면 전환 시 각 라이프 사이클이 다시 호출되며 가로 또는 세로 화면 전환 시 한 번만 실행됩니다.

(3) 액티비티 설정 시 android:configChanges="orientation|keyboardHidden", 화면 전환은 각 라이프 사이클을 다시 호출하지 않고 onConfigurationChanged 메소드만 실행됩니다

5. 화면 전환을 피하고 액티비티 라이프 사이클을 다시 시작하세요

위의 화면 전환 라이프 사이클을 보면, 영상 재생 중 화면 회전 등 불필요한 문제를 방지하기 위해 라이프 사이클이 반복되지 않도록 하는 것이 더 나은 솔루션임을 알 수 있습니다.

(1) android 2.3 이전 버전 android:configChanges="orientation|keyboardHidden"

(2) android 3.0 이후 버전 android:configChanges="orientation|screenSize"

가로 및 세로 화면 설정

Android의 가로 및 세로 화면 전환은 휴대폰 개발에서 비교적 일반적입니다. 개발 과정에서 가로 화면과 세로 화면을 전환할 때 불필요한 문제를 피하기 위해 많은 소프트웨어에서는 일반적으로 가로 화면과 세로 화면 간의 전환을 금지합니다.

1. 이를 달성하려면 AndroidManifest.xml의 액티비티에 android:screenOrientation 속성 값을 설정하세요.

(1) 세로 화면: android:screenOrientation="portrait"

(2) 가로 화면: android:screenOrientation="landscape"

2. Java 코드 세트에서 다음과 유사한 코드를 사용합니다. (이 방법은 권장되지 않습니다. 다른 방향에서 큰 앱을 시작할 때 속도가 느려집니다.)

(1) 세로 화면: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

(2 ) 가로 화면 : setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

3. 뒤집기를 완전히 금지하려면 중력 유도로 인한 전환을 무시합니다(시뮬레이터에서는 작동하지 않지만, 시뮬레이터에서는 맞습니다). 실제 기기)

(1) 중력 무시: android:screenOrientation="nosensor"

가로 및 세로 화면 인식

1. onConfigurationChanged에서 결정합니다. 화면 방향 변경을 효과적으로 모니터링하려면 다음 조건이 필요합니다

(1) AndroidManifest.xml에 다음 권한이 추가됩니다. ebf50ea71981ffbb06de35d1fabafefbc09880216ba0693bd6f3cee9ae967db8

(2) AndroidManifest.xml 에 설정된 MiniSdkVersion 및 TargetSdkVersion 속성이 13보다 크거나 같습니다

(3) 추가: android:configChanges="keyboard|screenSize| orientation|layoutDirection"

(4) AndroidManifest.xml Activity에서 onConfigurationChanged(Configuration newConfig)

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == 1)//竖屏
if(newConfig.orientation == 2)// 横屏
}

에서 판단 2. 화면이 가로 화면으로 변경되면 시스템이 Activity의 onCreate 메서드를 다시 호출하기 때문에 onCreate에서 현재 방향을 확인한 다음 setContentView가 다른 레이아웃 xml을 로드하도록 합니다.

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i("info","landscape"); // 横屏
} else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
Log.i("info","portrait"); // 竖屏
}

참고: 이 방법을 사용하려면 라이프 사이클을 다시 시작하기 위해 AndroidManifest.xml에서 onConfigurationChanged를 설정할 필요가 없습니다.

가로 및 가로 간에 레이아웃 파일 전환 수직 화면 설정

소프트웨어가 수평 화면과 수직 화면 사이를 전환하도록 하려면 수평 화면과 수직 화면의 높이와 너비가 변경되므로 다른 레이아웃이 필요할 수 있습니다. 다음 방법을 통해 레이아웃을 전환할 수 있습니다

(1) res 디렉터리에 레이아웃 랜드 및 레이아웃 포트 디렉터리를 생성하면 해당 레이아웃 파일 이름은 main.xml과 같이 변경되지 않습니다. layout-land는 가로 화면 레이아웃이고,layout-port는 세로 화면 레이아웃입니다. 다른 것에 대해서는 걱정하지 마세요. 시뮬레이터가 자동으로 이를 찾습니다.

(2) 위 가로, 세로 화면 인식에서 가로, 세로 화면이 바뀌면 onCreate()나 onConfigurationChanged()에서 방향을 판단한 후 해당 메소드에서 ContentView를 재설정하여 다른 레이아웃 xml 레이아웃을 로드합니다. 파일

가로 화면과 세로 화면 전환 시 데이터 저장 및 읽기

또한 Android에서 화면 전환 시마다 Activity가 다시 시작되므로 Activity가 소멸되기 전에 현재 Activity 상태를 저장해야 합니다. , 그리고 활동이 다시 생성되면 진행 중인 게임이 자동으로 다시 시작되지 않도록 구성을 로드하세요!

액티비티 데이터 저장

(1) 시스템 리소스 제약으로 인해 액티비티가 파괴되거나 다시 생성되거나 화면이 회전하는 경우 사용자가 해당 액티비티로 돌아올 때 시스템은 이 액티비티를 갖게 됩니다. 과거 기록의 경우 시스템은 Bundle 객체에 저장된 키-값 쌍인 저장된 기록 데이터(인스턴스 상태)를 사용합니다. 시스템은 기본적으로 정보를 저장하기 위해 Bundle을 사용합니다

(2) 저장하기 위해 추가 업데이트 인스턴스 상태에 더 많은 데이터를 추가하려면 onSaveInstanceState(Bundle outState) 콜백 함수를 다시 작성해야 합니다. 시스템은 예외로 인해 활동이 삭제될 때 번들 객체를 전달하므로 번들에 추가 정보를 추가할 수 있습니다. 그리고 시스템에 저장합니다. 활동이 삭제된 후 시스템이 이 활동 인스턴스를 다시 생성하려는 경우 이전 번들 객체(시스템)가 활동의

에 전달됩니다. (3) 활동이 중지되기 시작하고 시스템이 onSaveInstanceState(Bundle outState)를 호출하면 활동은 키-값 쌍 모음을 사용하여 상태 정보를 저장할 수 있습니다. 이 방법은 기본적으로 EditText 구성 요소의 텍스트 또는 ListView의 슬라이딩 위치와 같은 활동 보기의 상태 정보를 저장합니다.

활동 데이터 복구

(1) 활동이 실행될 때 Destory에서 재구축되면 시스템이 전달한 활동 번들에서 저장된 상태를 복원할 수 있습니다. onCreate() 및 onRestoreInstanceState() 콜백 메서드는 모두 동일한 인스턴스 상태 정보를 포함하는 동일한 번들을 수신합니다.

(2) onCreate() 메소드는 새로운 Activity 인스턴스가 처음 생성될 때와 이전에 Destroy된 인스턴스가 다시 생성될 때 모두 호출되므로 Bundle 객체인지 확인해야 합니다. null을 읽으려고 하기 전에. null인 경우 시스템은 이전에 삭제된 활동을 복원하는 대신 새 활동 인스턴스를 생성합니다.

(3) onCreate 메서드에서 데이터를 복원하는 대신 onRestoreInstanceState()를 구현하도록 선택할 수도 있습니다. onRestoreInstanceState() 메서드는 onStart() 메서드 이후에 실행됩니다. 시스템은 복원해야 할 상태 정보가 있는 경우에만 onRestoreInstanceState()를 호출하므로 Bundle이 null인지 확인할 필요가 없습니다.

위는 에디터가 소개한 안드로이드 액티비티의 라이프사이클 가로, 세로 화면전환에 대한 지식입니다. 많은 분들께 도움이 되었으면 좋겠습니다!

Android Activity 가로 및 세로 화면 전환의 라이프사이클과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.