[Android/Kotlin] 안드로이드의 구성 요소

SoyoungLee·2021년 6월 7일
0

안드로이드/코틀린

목록 보기
2/68
post-thumbnail

📌 UI 화면을 나타내는 액티비티

💜 액티비티 (Activity)

  • 사용자가 바라보는 인터페이스 화면을 가지고 있는 요소
  • Activity_main.xml과 같은 레이아웃 파일로 구성

💜 메인 스레드 (UI 스레드)

  • 눈에 보이지는 않지만 액티비티를 제어하는 통제 센터와 같은 역할 (Start/Stop Activity)
  • 메인 스레드가 액티비티 구동 -> 액티비티는 뷰를 그림

💜 뷰 (View)

  • 보이지 않는 레이아웃 요소 : 화면 배치 등
  • 보이는 요소 : 텍스트 박스, 버튼 등 위젯 (Widget)
class MainActivity : AppCompatActivity() {  	// 상위의 Activity 클래스로부터 상속
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)  // UI 화면을 나타내는 xml을 해석
    }
}

💌 액티비티의 생명주기


콜백 함수 : 메인 스레드의 명령 이벤트에 따라 호출

  • onCreate( ) : 액티비티 생성 시 호출, 반드시 구현
    - setOnCreateView( ) : 레이아웃 지정하여 화면 그리기
  • onPause( ) : 일시중단. 다른 것에 의해 앱이 가려졌을 때 호출
  • onResume( ) : 다시 시작
  • onDestroy( ) : [Back]키 연속 눌러서 백 스택의 액티비티 없으면 호출 / 리소스 부족하면 시스템 강제 종료
    - onSaveInstanceState( ) / onRestoreInstanceState( ) 오버라이딩 : 강제 종료 시 상태를 저장 복구

💌 프래그먼트의 생명주기

프래그먼트 : 화면의 작은 단위

  • onAttach( ) : 액티비티에 프래그먼트 추가
  • onDetach( ) : 제거
  • onCreateView( ) : 프로그램 실행 중간에 UI를 구성하는 View를 반환
  • onActivityCreated( ) : 완전히 UI 구성된 다음 나머지 동작 코드 구성

💬 lateinit 사용

  • 각 콜백 함수 호출 시기 정해져있지 않으므로 특정 UI 사용 시 유용
class MainActivity : AppCompatActivity() {

	// 알람 시스템 서비스의 선언
    lateinit var alarmManager: AlarmManager     

	 // 앱의 생명주기 (생성 시 호출되는 콜백 함수)
    override fun onCreate(savedInstanceState: Bundle?) {   
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        alarmManager = getSystemService(AlarmManager::class.java)   // 지연 초기화 시점
    }
}
  • getSystemService( )는 안드로이드 프레임워크의 시스템 서비스를 서로 연결하기 위한 API로 시스템 서비스 중 AlarmManager::class.java를 가리킴

❓ 시스템 서비스란?

  • 네트워크, 알람, 디스플레이, 위치 등의 서비스가 스마트폰이 켜지면 백그라운드에서 구동.
  • 이것을 애플리케이션에서 연결하기 위해서 getSystemService( ) 함수 사용.

💬 lazy 사용

class MainActivity : AppCompatActivity() {

    private val messageView : TextView by lazy { 
        // messageView의 첫 접근에서 초기화
        findViewById(R.id.message_view) ad TextView
    }
    override fun onCreate(savedInstanceState: Bundle?) {    
        super.onCreate(savedInstanceState)
        onSayHello()
    }
    fun onSayHello(){
        messageView.text = "Hello"  // 이 시점에서 초기화됨
    }
}
  • by lazy{ }는 message_view라는 리소스에 접근할 때 실행
  • findViewById( ) 함수 사용하여 R.id.message_view를 찾아 초기화

📌 백그라운드에서 계속 실행되는 서비스

  • 서비스(Service)는 눈에 보이지 않는 백그라운드에서 실행
  • 메인 스레드가 제어
  • 애플리케이션(프로세스)내에 있으면 startService( )/stopService( )로 시작/중단
  • 다른 프로세스에 있으면 xxxManager 역할하는 중간 매개채(Proxy)의 서비스 거쳐 AIDL통해 원격 서비스에 명령 내림
    - Parcel을 통해 필요 데이터 전달
    - bindService( ) '붙인다'/ unbindService( ) '떼어낸다'로 사용/중단
  • 바인더(Binder) : 두 프로세스 간의 메시지를 전달
  • AIDL(Android Interface Definition Language) : 통신에 사용하는 인터페이스를 만들기 위한 정의언어
  • 한번 시작된 서비스는 앱이 종료되고 다른 앱으로 이동해도 계속 백그라운드에서 실행될 수 있음

📌 방송 수신자 (Broadcast Receiver)

  • 안드로이드에서 발생하는 다양한 이벤트 및 정보를 받고 전달

📌 콘텐츠 제공자 (Content Provider)

  • 데이터를 관리하거나 다른 앱에 데이터를 제공

📌 인텐트 (Intent)

  • 안드로이드 4대 요소 간에 메시지를 전달
  • 명시적 인텐트 : 특정 클래스를 지정
  • 묵시적 인텐트 : 특정 데이터에 대해 수행할 액션을 지정
    (여러 개의 연관된 요소를 호출할 수 있는 장점)

📌 핸들러와 메시지 큐

  • 앱 실행시 메인 스레드에서 메시지 큐(Message Queue)와 루퍼(Looper)가 항상 자동 생성됨
  • UI 요소 갱신/변경은 오로지 메인 스레드를 통해서만 변경해야 함
profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글