프로그래밍 언어/Android

Android 화면이 회전하면 활동 다시 시작

Rateye 2021. 9. 8. 10:28
728x90
반응형
질문 : 회전 Android에서 활동 다시 시작

내 Android 애플리케이션에서 장치를 회전하면 (키보드를 밀어 내면) 내 Activity 이 다시 시작됩니다 ( onCreate 가 호출 됨). 이제 이것은 아마도 예상되는 방식이지만 onCreate 메서드에서 많은 초기 설정을 수행하므로 다음 중 하나가 필요합니다.

답변

애플리케이션 클래스 사용

초기화에서 수행하는 작업에 따라 Application 을 확장하는 새 클래스를 만들고 해당 클래스 내에서 onCreate 메서드로 초기화 코드를 이동하는 것을 고려할 수 있습니다.

public class MyApplicationClass extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    // TODO Put your application initialization code here.
  }
}

애플리케이션 클래스의 onCreate 는 전체 애플리케이션이 생성 될 때만 호출되므로 방향에서 액티비티가 다시 시작되거나 키보드 가시성 변경으로 인해 트리거되지 않습니다.

이 클래스의 인스턴스를 싱글 톤으로 노출하고 getter 및 setter를 사용하여 초기화중인 애플리케이션 변수를 노출하는 것이 좋습니다.

참고 : 등록 및 사용하려면 매니페스트에서 새 애플리케이션 클래스의 이름을 지정해야합니다.

<application
    android:name="com.you.yourapp.MyApplicationClass"

구성 변경에 대한 반응 [업데이트 : API 13부터 사용되지 않습니다. 권장 대안보기 ]

또 다른 대안으로 방향 및 키보드 가시성 변경과 같은 재시작을 유발하는 이벤트를 애플리케이션에서 수신하고 활동 내에서 처리하도록 할 수 있습니다.

활동의 매니페스트 노드에 android:configChanges 노드를 추가하여 시작합니다.

 <activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

또는 Android 3.2 (API 레벨 13) 이상 :

<activity android:name=".MyActivity"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name">

그런 다음 Activity 내에서 onConfigurationChanged 메서드를 setContentView 를 호출하여 GUI 레이아웃이 새 방향으로 다시 수행되도록합니다.

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.myLayout);
}
출처 : https://stackoverflow.com/questions/456211/activity-restart-on-rotation-android
728x90
반응형