[TIL] Android 앱 개발 입문 : 인텐트와 액티비티

지혜·2023년 12월 13일

Android_TIL

목록 보기
17/70

✏231213 수요일 TIL(Today I learned) 오늘 배운 것

📖인텐트 (Intent)

  • 일종의 메세지 객체. 다른 컴포넌트(액티비티, 서비스, 브로드캐스트리시버)로 작업을 요청할 수 있다.
    ex.액티비티시작하기. 서비스시작하기. 브로드캐스트 전달하기 등 작업 요청

[인텐트의 유형]

  • 명시적 인텐트 : 특정한 컴포넌트를 직접적으로 호출할 때 사용되는 인텐트.
    => 앱 내부에서 다른 액티비티(startActivity())나 서비스(startService())를 시작(호출)할 때사용.

    • Intent(출발할액티비티(보통 this), 도착할액티비티)
  • 암시적 인텐트 : 특정한 컴포넌트를 명시하지않고, 수행의 일반적인 작업을 인텐트 객체에 설정하여 startActivity() 메소드에 넘긴다.
    => 해당 인텐트를 처리할 수 있는 모든 어플을 검색하여 적합한 인텐트 필더를 가진 컴포넌트를 선택해 실행시킬 수 있게 된다.

    • 암시적 인텐트는 인텐트 필터를 동반하여 사용할 수 있다.

    • 인텐트 필터<intent-filter> : 특정 인텐트에 반응할 준비가 되어있는지 나타내는 설정.

      • 인텐트 필터의 하위 속성들

      • action : 컴포넌트가 어떤 능력인지에 대한 문자열. 개발자의 임의 지정 단어가 올수도 있고, 라이브러리에서 지정한 문자열도 이용가능하다.

      • category : 누구의 컴포넌트인지 표현하는 컴포넌트에 대한 추가 정보. 개발자의 임의 단어가 가능하긴 하지만, 보통 라이브러리의 준비된 단어를 사용하며, 암시적 인텐트를 실행할 경우 코드에서 지정하지 않아도 CATEGORY_DEFAULT가 선언된 것 처럼 행동하므로, DEFAULT 태그가 필수로 있어야 한다.

      • data : 컴포넌트를 실행하기 위해 필요한 데이터에 대한 상세정보를 명시.
        URL 형식으로 표현되며, android:scheme, android:host, android:port , android:mimeType 등으로 선언한다.

  • Extra 데이터 : 인텐트를 이용하여 컴포넌트를 실행하면서 데이터를 전달 할 수 있다. 이때, 인텐트에 담아 전달하는 데이터를 Extra Data 라고 한다.

    • 인텐트를 발생하기 전에 putExtra(키,값) 함수를 이용하여 데이터를 인텐트 객체에 담아서 전달한다.
    • 받는 쪽에서 intent.get타입Extra("넘겨받을데이터의키", 기본값)을 이용하여 얻을 수 있다. 기본값은 설정하지 않아도 된다.

📖액티비티 (Activity)

  • 안드로이드의 4대 컴포넌트 중에 하나로, 사용자가 직접 상호작용하는 화면을 말한다.
    => UI담당. 사용자 입력에 반응하는 이벤트 기반 프로그래밍

  • 각 액티비티는 독립적으로, 한 액티비티가 하나의 기능만을 담당한다.
    ex. 이메일 목록을 출력하는 액티비티 하나. 이메일 작성하는 액티비티 하나. 등 각각 독립되어있다.

  • 어플리케이션은 최소 한 개 이상의 액티비티를 포함하고있으며, 앱이 시작될 때 지정된 액티비티를 실행하여 사용자에게 첫 화면을 보여준다.

[액티비티 등록]

  • 모든 액티비티는 Android Manifest파일에 등록해야 사용할 수 있다. 보통 Activity생성기능을 사용하면 자동으로 등록이 된다.
    +Android Manifest의 역할 : 애플리케이션의 기본구조를 정의하고, 시스템이 앱을 어떻게 실행하는 지 알려주는 지시사항을 담고 있는 파일이다.
    => 패키지 이름 설정, 구성 요소 선언, 권한 설정 등

  • 액티비티의 이름 등을 바꿀 때에는 Refactor>Rename을 사용해야 Android Manifest등에도 변경된 사실이 반영된다.

  • 이렇게 등록한 액티비티는 setContentView()를 이용하여 인터페이스와 연결을 해줘야한다.
    =>setContentView(R.layout.연결할액티비티이름)

[액티비티 생명주기]

  • 수명주기 콜백 메소드
  1. onCreate( ) : 새로운 액티비티가 처음 생성되어 시작될 때, 레이아웃 설정 등을 수행하면서 한 번만 실행된다.
    => 액티비티 생명주기 시작

  2. onStart( ) : 액티비티가 사용자에게 보이기(Visibility)직전에 실행 시작하는 시점. +BroadcastReceiver 실행

  3. onResume( ) : 모든 액티비티 중 제일 앞에 표시되며, 사용자와 상호작용하는 사용자 입력 등의 무조건 실행해야하는 기능이 들어간다.

  4. onPause( ) : 기기가 절전모드에 들어가거나 대화상자가 나타나는 등 완전히 소멸되는 것은 아니지만, 사용자가 돌아오지 않을 수 있기 때문에 그 동안 이루어졌던 변경사항을 저장한다.

    4.5 새로운 액티비티를 부르면 onPause( )와 onStop( ) 사이에서 새로운 액티비티가 보여지고, 새로운 액티비티가 onResume( )되면 기존 액티비티의 onStop( )이 호출된다.

  5. onStop( ) : 사용자에게서 onResume( )으로 보여지는 기존의 화면(Visibility)이 완전히 사라지고, 다른액티비티가 보여(onResume())지면 호출한다. 이후 onRestart( )를 통해 새로 시작할 액티비티를 onStart( ) 할 수 있게 되거나, onDestroy( )를 통해 생명주기가 종료된다.

  6. onDestroy( ) : 화면이 완전히 종료될 때 (바로 직전에) 호출
    => 액티비티 생명주기 종료

=>시스템은 액티비티의 전체 수명 중에 OnStart( ) 및 onStop( )을 여러번 호출 할 수 있다. (사용자에게는 표시(Visibility)되었다 숨겨지는 상태를 오간다.)


✏실습을 통해 새롭게 알게된 것

  • Android Manifest에서 activity안에 선언된 android:exported="false"인 경우에는 동일한 앱, 동일한 사용자 id 등 특정한 경우에만 접근이 가능하다. true인 경우에는 외부의 모든 앱을 포함해서 접근이 가능하다.
    +메인액티비티는 실행을 위해 꼭 true로 설정해줘야 한다.

  • Android Manifest에서 android : label 속성은 인텐트 필더를 포함한 구성요소가 하나 이상인 경우, 해당 구성 요소의 label 속성 값을 바탕으로 나열되므로 값을 지정하는 것이 좋다.
    => label을 통해, 활동이 사용자에게 표시될 때 직접 확인할 수 있다.


@참조
[안드로이드] 인텐트와 인텐트 필터

profile
파이팅!

0개의 댓글