
안드로이드는 4가지 컴포넌트(액티비티, 서비스, 브로드캐스터, 콘텐츠 제공자)가 있으며, 이들은 안드로이드 앱의 필수적인 구성 요소임

사용자가 앱과 상호작용하는 하나의 화면

UI를 제공하지 않으며, 백그라운드에서 어떠한 작업(파일 다운로드 등)을 처리하기 위해 사용됨
서비스는 시작 방식에 따라 스타티드 서비스와 바운드 서비스로 나눌 수 있음

개념이 어려워서 나중에 읽어보고 추가하겠음
https://full-stack.tistory.com/entry/%EC%84%9C%EB%B9%84%EC%8A%A4Service-3-%EB%B0%94%EC%9A%B4%EB%93%9C-%EC%84%9C%EB%B9%84%EB%93%9CBound-Service-%EB%A1%9C%EC%BB%AC-%EB%B0%94%EC%9D%B8%EB%94%A9
안드로이드 시스템 및 기타 안드로이드 앱에서 발생하는 각종 이벤트(기기 충전 시작, 비행기 모드 전환 등)의 정보를 받아와 핸들링함

<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
val br: BroadcastReceiver = MyBroadcastReceiver()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply {
addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED)
}
registerReceiver(br, filter)
안드로이드 앱에서 브로드캐스트를 전송할 수도 있음
class BootCompletedReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if(intent?.action == Intent.ACTION_BOOT_COMPLETED) {
Toast.makeText(context, "부팅되었습니다.", Toast.LENGTH_LONG).show()
val i = Intent(context, IntroActivity::class.java)
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
val pendingIntent = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)
try {
pendingIntent.send()
} catch (e: Exception) {
Logger.e("onReceive", e.toString())
}
}
}
}
유연성이 높음 -> 특정 이벤트에 반응하여 액티비티를 실행할 수 있음 (부팅 완료 후에만 실행할 작업 설정 가능)
안드로이드 앱 간 데이터 공유 정보를 관리함 (앱 내 데이터에 대한 액세스 권한을 관리함)

🤔 실제로 구현해보면 좋을 것 같다
https://developer.android.com/guide/topics/providers/content-provider-basics?hl=ko
시간이 된다면.. 해보도록 하자
컴포넌트 간 통신에 이용되는 메시징 객체

val intent = Intent(this, SubActivity::class.java)
startActivity(intent)
// ACTION_SEND 작업을 수행하는 인텐트이며, "text/plain" 데이터가 담김
val sendIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, textMessage)
type = "text/plain"
}
// 결과가 null이 아닌 경우, 인텐트를 처리할 수 있는 앱이 최소 하나는 있다는 뜻이므로 startActivity()를 호출해도 안전함
if (sendIntent.resolveActivity(packageManager) != null) {
startActivity(sendIntent)
}
<!--데이터 유형이 텍스트인 경우, ACTION_SEND 인텐트를 수신할 인텐트 필터가 있는 액티비티 선언-->
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
https://codezaram.tistory.com/50
https://hungseong.tistory.com/23
https://while1.tistory.com/177
https://velog.io/@jeongminji4490/Android-Context
https://developer.android.com/guide/components/intents-filters?hl=ko
https://parkjh7764.tistory.com/151