크게 아래 3가지로 나눌 수 있다.
활성 - 액티비티 화면 출력, 사용자가 이벤트를 발생 O ( onCreate -> onStart -> onResume 까지 실행 )
일시 정지 - 액티비티 화면 출력, 이벤트 발생 X ( onPause까지 실행 )
비활성 - 액티비티 화면 출력 X ( onPause() -> onStop까지 실행 )
화면을 회전하는 경우 액티비티가 종료되었다가 나온다. 따라서 액티비티의 데이터가 초기화 된다.
이를 방지하기 위해 생명 주기를 활용하여 데이터를 보존할 수 있다.
onResume()까지 실행된 상태에서 화면을 회전하면
onPuase() -> onStop() -> onSaveInstanceState() -> onDestroy() 가 실행된다.
이후 액티비티 객체가 자동으로 생성되며
onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()까지 호출되면서 액티비티가 출력된다.
복원해야 할 데이터는 Bundle이라는 객체를 통해 저장 및 복원한다.
override fun onCreate(savedInstanceState: Bundle?) {
...
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
...
}
override fun onSaveInstanceState(outState: Bundle) {
...
}
소프트 키보드 관련 기능은 InputMethodManager 클래스가 지원한다.
// 키보드 올리고 내리기
val manager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
binding.showInputButton.setOnClickListener {
binding.editView.requestFocus()
manager.showSoftInput(binding.editView, InputMethodManager.SHOW_IMPLICIT)
}
binding.hideInputButton.setOnClickListener {
manager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}
주의할 점은 글이 입력될 뷰가 포커스를 가지지 않은 상태면 키보드가 나타나지 않는다.
따라서 포커스를 강제로 지정 한 후 showSoftInput() 함수를 호출해야 한다.
일반적으로는 키보드가 올라오면 시스템에서 액티비티의 상태를 보고 액티비티 크기를 조정해 준다.
개발자가 직접 조정하고 싶다면 매티페스트 파일에서 설정할 수 있다.
<activity android:name=".SettingActivity" android:windowSoftInputMode="mode">