인텐트 이해하기
인텐트란?
안드로이드 앱은 모두 4개의 컴포넌트로 개발하는데 이때 핵심 클래스가 바로 Intent입니다. 인텐트는 한마디로 ‘컴포넌트를 실행하려고 시스템에 전달하는 메시지’라고 정의할 수 있습니다. 즉, 기능을 수행하는 함수를 제공하는 클래스가 아니라 데이터를 담는 클래스입니다. 이 데이터는 컴포넌트를 실행하는 정보이며 이 정보가 담긴 인텐트 객체를 시스템에 전달하면 컴포넌트가 실행됩니다.
전환되는 액티비티가 안드로이드의 컴포넌트 클래스라면 개발자가 코드에서 직접 생성해서 실행할 수 없습니다. 컴포넌트 클래스는 시스템이 생성해서 실행하는 클래스이므로 개발자가 작성하는 코드로 생명주기를 관리할 수 없습니다.
결국 전환 시키려면 시스템에서 인텐트의 정보를 분석해서 그에 맞는 컴포넌트를 실행해 줘야 합니다. 그러면 시스템에서 인텐트의 정보를 분석해서 그에 맞는 컴포넌트를 실행해 줍니다. 이러한 중제 역할은 외부 앱의 컴포넌트와 연동할 때도 마찬가지입니다.
액티비티는 매니페스트 파일에 등록 해야 합니다. 액티비티 클래스 하나당 <activity> 태그 하나로 등록해야 하며, 이때 액티비티의 클래스 이름을 지정하는 name 속성은 생략할 수 없습니다.
MainActivity와 DetailActivity 등록
<activity
android: name=".DetailActivity"
android:exported="true" />
<activity
android: name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
액티비티뿐만 아니라 서비스, 브로드 케스트 리시버, 콘텐츠 프로바이더도 매니페스트 파일에 등록해야합니다. 이처럼 안드로이드 컴포넌트를 매니페스트 파일에 등록해야 하는 이유는 시스템에 컴포넌트를 알려야 하기때문입니다. 시스템은 런타임 때 매니페스틑 파일의 정보르르 참조하여 앱을 실행합니다. 만약 어떤 컴포넌트를 개발해 놓고 매니페스트 파일에 등록하지 않으면 시스템은 해당 컴포넌트를 알 수 없습니다. 따라서 인텐트가 해당 컴포넌트를 실행할 수 없습니다.
인텐트를 시스템에 전달
val intent: Intent = Intent(this,DetailActivity::class.java)
startActivity(intent)