액티비티

k_hyun·2023년 3월 1일
0
post-thumbnail

액티비티 생명주기


[출처]
https://programmingfbf7290.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0Activity-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-%EC%B4%9D%EC%A0%95%EB%A6%AC

크게 아래 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">

0개의 댓글