Understanding Android Application Architecture: Core Components and Lifecycle

Artem Asoyan
3 min readFeb 18, 2025

--

In the world of Android development, understanding the architecture and core components of an application is crucial for building robust, maintainable, and efficient apps. In this article, we’ll explore the fundamental components of Android applications — Activity, Fragment, Service, BroadcastReceiver, and ContentProvider—as well as the lifecycle of these components.

1. Core Components of an Android Application

Android applications are built using the following core components:

1.1 Activity

An Activity represents a single screen with a user interface. It's the entry point for user interactions.

  • Each screen in an app is an Activity.
  • Activities are managed through a stack called the back stack.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

1.2 Fragment

A Fragment is a reusable UI component that runs within an Activity. It allows for more modular and flexible UI design.

  • Fragments can be combined or reused across activities.
  • Each fragment has its own lifecycle tied to its parent activity.
class ExampleFragment : Fragment(R.layout.fragment_example) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById<TextView>(R.id.textView).text = "Hello from Fragment"
}
}

1.3 Service

A Service is a component that runs in the background to perform long-running operations without a user interface.

  • Can run indefinitely or until explicitly stopped.
  • Useful for tasks like downloading files or playing music.
class MyService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d("MyService", "Service is running")
return START_STICKY
}
    override fun onBind(intent: Intent?): IBinder? = null
}

1.4 BroadcastReceiver

A BroadcastReceiver listens for and responds to broadcast messages from other apps or the system.

  • Used to handle system events like battery status changes or incoming SMS.
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.d("MyBroadcastReceiver", "Received broadcast: ${intent.action}")
}
}

Registering the receiver in AndroidManifest.xml:

<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

1.5 ContentProvider

A ContentProvider manages access to shared app data, typically stored in a database.

  • Provides a standard interface for accessing and modifying data.
  • Often used to share data between applications.
class MyContentProvider : ContentProvider() {
override fun onCreate(): Boolean {
return true
}
    override fun query(...): Cursor? { /* Implementation */ }
override fun insert(...): Uri? { /* Implementation */ }
override fun delete(...): Int { /* Implementation */ }
override fun update(...): Int { /* Implementation */ }
}

2. Lifecycle of Core Components

Understanding the lifecycle of Android components is essential to manage resources and prevent memory leaks.

2.1 Activity Lifecycle

An Activity goes through the following states:

  1. onCreate(): Initialize resources.
  2. onStart(): Prepare the activity to become visible.
  3. onResume(): Activity is in the foreground and interacting with the user.
  4. onPause(): Activity is partially visible.
  5. onStop(): Activity is no longer visible.
  6. onDestroy(): Cleanup before the activity is destroyed.

Lifecycle diagram:

onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy

2.2 Fragment Lifecycle

The Fragment lifecycle mirrors the Activity lifecycle with additional callbacks:

  • onAttach(), onCreate(), onCreateView(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView(), onDestroy(), onDetach().

2.3 Service Lifecycle

  • onCreate(): Service is created.
  • onStartCommand(): Service starts running.
  • onDestroy(): Service is destroyed.

2.4 BroadcastReceiver Lifecycle

  • onReceive() is the only method and is called when the broadcast is received.

2.5 ContentProvider Lifecycle

  • onCreate(): Initializes the provider.
  • Data access methods like query(), insert(), update(), and delete() are called when needed.

Conclusion

Understanding Android’s core components and their lifecycles is essential for building reliable and efficient applications. By mastering Activity, Fragment, Service, BroadcastReceiver, and ContentProvider, you lay a solid foundation for advanced topics like Jetpack Architecture Components, dependency injection, and reactive programming.

--

--

Artem Asoyan
Artem Asoyan

Written by Artem Asoyan

Head Of Mobile, Android Tech/Team Leader, Career mentoring. 12+ years in software development #MobiusConference2023 #PodlodkaAndroidCrew1 #Leetcode (0.4%)

No responses yet