안드로이드에서 화면(UI) 구성의 가장 기본 요소는 Activity이다.
앱에서 위젯(Button, ImageView)을 표시하기 위해서는 최소한 한개 이상의 Activity를 가져야 한다.
즉, App에서 보이는 화면 하나하나가 Activity라고 생각하면 된다.
Activity가 화면에 보여지는지 안보여지는지에 따라서 상태가 변한다.
Activity는 메모리에 데이터가 쌓이는 '스택' 구조로 화면에 보여진다. 메모리에 쌓이고, 소멸되기 까지의 생명주기를 가지고 있다.
위 그림을 통해 알 수 있듯이 Activity가 생성되고 종료 되기 까지 상태에 따라 시스템은 각 콜백을 호출한다.
Activity를 만들 때 단 한번만 하면 되는 작업들
Activity가 다시 호출될 떄 하면 되는 작업들
개발자분께서 말씀하시길 onPause()와 onStop()을 확실하게 구분짓기는 어렵기 때문에 나눠서 구현하지 않고 그냥 한곳에다가 구현한다더랑
위의 6가지 함수가 각각 실행되는 경우 로그를 찍도록 작성해봤다.
에뮬레이터를 통해 간단하게 실습(?)을 해봤다.
App이 시작될 때: onCreate(), onStart(), onResum()이 차례대로 실행
App이 일부 보이지 않게 되었을 때 : onPause() 와 onStop() 차례대로 실행
App이 다시 보여지게 되었을 때 : onStart() 와 onResume() 차례대로 실행
APP을 완전히 종료했을 때 : onDestroy()
새로운 Activity를 시작할때, Activity에서 결과를 받을지에 따라 startActivity() 또는 startActivityForResult()를 사용한다.
두가지 모두 Intent 객체를 전달해야한다.
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
btn.setOnClickListener {
val intent = Intent(this, SecondActivity:: class.java)
startActivityForResult(intent, 100);
}
btn_2.setOnClickListener {
val intent = Intent()
intent.putExtra("message", "안녕 나는 두번째 액티비티야!")
setResult(Activity.RESULT_OK, intent)
finish()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
100 -> {
Toast.makeText(this, data!!.getStringExtra("message").toString(), Toast.LENGTH_SHORT).show()
}
}
}
}