Aplikasi Android memiliki struktur yang khas dan berbeda dibandingkan dengan platform lain seperti iOS, Windows, atau macOS. Jika Anda baru memulai dalam pengembangan aplikasi Android atau ingin memperdalam pengetahuan Anda, penting untuk memahami komponen utama yang membentuk aplikasi Android.
Dalam artikel ini, Bardimin akan membahas secara mendetail tentang Activity, Fragment, Intent, Broadcast Receiver, dan Service, yang merupakan komponen inti untuk memastikan aplikasi Android berfungsi dengan baik.
Dengan memahami cara kerja dan interaksi setiap komponen ini, Anda dapat menciptakan aplikasi yang tidak hanya efisien tetapi juga mudah untuk dikelola dan dikembangkan lebih lanjut. Baik Anda seorang pemula maupun pengembang berpengalaman, panduan ini akan membantu Anda memahami struktur aplikasi Android dan menerapkannya dalam proyek Anda.
Mari kita mulai dengan menjelajahi Activity, komponen dasar yang bertanggung jawab untuk menampilkan antarmuka pengguna (UI) dalam aplikasi Android.

1. Activity: Dasar Antarmuka Pengguna
Activity merupakan salah satu elemen paling penting dalam pengembangan aplikasi Android. Elemen ini bertugas untuk menampilkan antarmuka pengguna (UI) dan mengatur interaksi pengguna dengan aplikasi. Setiap Activity biasanya mewakili satu tampilan dalam aplikasi, dan aplikasi Android sering terdiri dari beberapa Activity yang saling berkolaborasi untuk memberikan pengalaman pengguna yang menyeluruh.
Sebagai contoh, dalam aplikasi kalender:
- Activity Pertama: Menampilkan daftar jadwal harian pengguna.
- Activity Kedua: Memungkinkan pengguna untuk menambahkan janji baru dengan mengisi formulir.
Setiap Activity dirancang untuk menjalankan tugas tertentu dan dapat diakses secara terpisah, baik dari dalam aplikasi itu sendiri maupun dari aplikasi lain. Ini menjadikan Activity sebagai komponen yang sangat fleksibel dan dapat digunakan kembali.
Karakteristik Utama Activity
- Independen: Setiap Activity beroperasi secara mandiri dan tidak tergantung pada Activity lainnya.
- Dapat Dipanggil dengan Intent: Activity dapat diakses menggunakan Intent, baik secara eksplisit (langsung menyebut nama kelas) maupun implisit (menentukan tindakan yang ingin dilakukan).
- Siklus Hidup (Lifecycle): Activity memiliki siklus hidup yang dikelola oleh sistem Android, seperti onCreate(), onStart(), onResume(), dan onDestroy(), yang memungkinkan pengembang mengontrol perilaku aplikasi saat Activity dibuat, ditampilkan, atau dihentikan.
Cara Kerja Activity
Activity beroperasi secara mandiri, yang berarti setiap Activity dapat berfungsi tanpa bergantung pada Activity lainnya. Hal ini memungkinkan Activity untuk digunakan kembali di berbagai aplikasi.
Contoh Penggunaan Kembali Activity
- Aplikasi Email: Sebuah aplikasi email mungkin memiliki Activity untuk mengirim pesan. Activity ini bisa dimanfaatkan oleh aplikasi lain, seperti aplikasi kalender, untuk mengirim undangan rapat tanpa perlu membuat Activity baru dari awal.
- Aplikasi Media Sosial: Activity untuk berbagi konten dapat digunakan kembali di berbagai aplikasi, seperti galeri foto atau aplikasi berita.
Kemampuan untuk menggunakan kembali Activity ini tidak hanya menghemat waktu dalam pengembangan, tetapi juga menjaga konsistensi antarmuka pengguna di berbagai aplikasi.
Komunikasi Antar Activity
Activity tidak dapat berinteraksi secara langsung. Sebagai alternatif, Android menyediakan mekanisme yang disebut Intent untuk memulai Activity lain dan mentransfer data antar Activity.
Bagaimana Intent Bekerja
Anda dapat menggunakan Intent untuk membuka Activity baru dari Activity yang sedang aktif. Contohnya, ketika pengguna menekan tombol “Tambah Janji” di aplikasi kalender, Intent akan membuka Activity baru untuk mengisi formulir janji.
Intent juga dapat membawa informasi dari satu Activity ke Activity lainnya. Misalnya, Anda bisa mengirim rincian janji dari Activity daftar janji ke Activity detail janji.
Contoh Penggunaan Intent
- Aplikasi E-commerce: Ketika pengguna memilih produk dari daftar, Intent digunakan untuk membuka Activity detail produk dan mengirim informasi seperti nama produk, harga, dan gambar.
- Aplikasi Chat: Intent digunakan untuk membuka Activity obrolan dan mengirim data seperti ID pengguna dan nama kontak.
2. Fragment: Modularitas dalam Antarmuka Pengguna
Fragment adalah elemen penting dalam pengembangan aplikasi Android yang memungkinkan pemecahan Activity menjadi bagian-bagian kecil dan modular. Setiap Fragment memiliki antarmuka pengguna (UI) dan logika tersendiri, sehingga memudahkan pengelolaan antarmuka yang lebih fleksibel dan dinamis.
Dengan memanfaatkan Fragment, Anda dapat menciptakan aplikasi yang lebih responsif terhadap berbagai ukuran layar dan orientasi perangkat, seperti ponsel, tablet, atau perangkat lipat.
Manfaat Menggunakan Fragment
Fragment memberikan beberapa manfaat utama dalam pengembangan aplikasi Android:
- Modularitas: Dengan membagi Activity menjadi beberapa Fragment, Anda dapat mengelola setiap bagian antarmuka secara terpisah, yang mempermudah pengembangan dan pemeliharaan kode.
- Fleksibilitas: Fragment memungkinkan penampilan beberapa bagian antarmuka dalam satu Activity, sangat berguna untuk perangkat dengan layar besar seperti tablet.
- Reusability: Fragment dapat digunakan kembali di berbagai Activity, mengurangi pengulangan kode dan meningkatkan efisiensi pengembangan.
- Adaptabilitas: Fragment memudahkan penyesuaian antarmuka untuk berbagai ukuran layar dan orientasi perangkat.
Contoh Penggunaan Fragment di Aplikasi E-commerce:
- Fragment Pertama: Menampilkan daftar produk di sisi kiri layar.
- Fragment Kedua: Menampilkan detail produk di sisi kanan layar.
- Di ponsel, hanya satu Fragment yang ditampilkan pada satu waktu, sedangkan di tablet, kedua Fragment dapat ditampilkan bersamaan.
Cara Kerja Fragment
Fragment memiliki siklus hidup yang mirip dengan Activity, termasuk metode seperti onCreateView(), onStart(), dan onDestroyView(). Namun, siklus hidup Fragment terkait dengan Activity yang menampilkannya.
Anda bisa menambahkan Fragment ke dalam Activity dengan menggunakan FragmentManager dan FragmentTransaction.
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, new MyFragment());
fragmentTransaction.commit();Fragment tidak dapat saling berkomunikasi secara langsung. Sebagai alternatif, komunikasi dilakukan melalui Activity yang menampung Fragment tersebut atau dengan menggunakan antarmuka (interface) untuk mentransfer data.
3. Intent: Mekanisme Komunikasi Antar Komponen
Intent merupakan salah satu mekanisme kunci dalam pengembangan aplikasi Android. Komponen ini berfungsi untuk memulai Activity, Service, atau mengirim Broadcast. Selain itu, Intent juga memungkinkan komunikasi antara komponen dalam aplikasi yang sama atau bahkan antar aplikasi yang berbeda.
Intent dapat dibedakan menjadi:
- Eksplisit: Memanggil komponen tertentu (seperti Activity atau Service) dengan menyebutkan nama kelasnya secara langsung.
- Implisit: Menyatakan tindakan yang ingin dilakukan atau jenis data yang ingin diproses, dan sistem Android akan memilih komponen yang paling sesuai.
Jenis-Jenis Intent
1. Explicit Intent
Explicit Intent digunakan ketika Anda mengetahui dengan jelas komponen mana yang ingin dipanggil, seperti Activity atau Service tertentu dalam aplikasi Anda.
Cara Kerja:
Anda menyebutkan nama kelas komponen yang ingin diakses. Contohnya, memulai Activity baru untuk menampilkan detail produk.
Intent intent = new Intent(this, ProductDetailActivity.class);
startActivity(intent);Contoh Penggunaan:
- Memulai Activity baru untuk menampilkan formulir login.
- Memulai Service untuk mengunduh file di latar belakang.
2. Intent Implicit
Intent Implicit digunakan saat Anda ingin meminta sistem Android untuk memilih komponen yang paling sesuai berdasarkan tindakan atau jenis data yang Anda tentukan.
Cara Kerja:
Anda menetapkan tindakan (seperti ACTION_VIEW) dan data (seperti URI atau tipe MIME) yang ingin diproses. Sistem Android akan mencari komponen yang dapat menangani permintaan tersebut.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“https://www.example.com”));
startActivity(intent);Contoh Penggunaan:
- Membuka URL di browser default pengguna.
- Membagikan teks atau gambar ke aplikasi lain (seperti media sosial atau email).
- Memilih aplikasi untuk membuka file PDF.
Perbedaan Explicit dan Implicit Intent
| Aspek | Explicit Intent | Implicit Intent |
| Tujuan | Memanggil komponen tertentu dalam aplikasi. | Meminta sistem untuk memilih komponen yang sesuai. |
| Penggunaan | Digunakan untuk navigasi internal aplikasi. | Digunakan untuk berinteraksi dengan aplikasi lain atau komponen sistem. |
| Contoh | Memulai Activity detail produk. | Membuka URL di browser atau membagikan konten. |
Contoh Penggunaan Intent dalam Aplikasi
1. Aplikasi E-commerce:
- Explicit Intent: Memulai Activity detail produk saat pengguna mengeklik item di daftar produk.
- Implicit Intent: Membagikan detail produk ke aplikasi media sosial atau email.
2. Aplikasi Media Sosial:
- Explicit Intent: Memulai Activity komentar saat pengguna mengeklik tombol “Lihat Komentar”.
- Implicit Intent: Membuka tautan eksternal di browser default pengguna.
3. Aplikasi Musik:
- Explicit Intent: Memulai Service untuk memutar lagu di latar belakang.
- Implicit Intent: Membagikan lagu ke aplikasi lain seperti WhatsApp atau Instagram.
4. Broadcast Receiver: Merespons Perubahan Sistem
Broadcast Receiver adalah komponen penting dalam aplikasi Android yang memungkinkan aplikasi Anda merespons Broadcast Intent yang dikirim oleh sistem Android atau aplikasi lain. Broadcast Intent adalah pesan sistem yang menginformasikan tentang perubahan status atau peristiwa tertentu, seperti perubahan status baterai, konektivitas jaringan, atau pesan SMS yang masuk.
Dengan menggunakan Broadcast Receiver, Anda dapat membuat aplikasi yang lebih responsif terhadap perubahan lingkungan atau sistem, sehingga memberikan pengalaman pengguna yang lebih baik.
Cara Kerja Broadcast Receiver
Broadcast Receiver berjalan di latar belakang dan tidak memiliki antarmuka pengguna. Mereka dirancang untuk merespons Broadcast Intent dengan cepat dan efisien. Berikut adalah beberapa poin penting tentang cara kerja Broadcast Receiver:
1. Pendaftaran:
- Broadcast Receiver harus didaftarkan ke sistem Android agar dapat merespons Broadcast Intent.
- Pendaftaran dapat dilakukan secara statis (melalui AndroidManifest.xml) atau dinamis (melalui kode program).
Contoh pendaftaran statis di AndroidManifest.xml:
<receiver android:name=“.MyBroadcastReceiver”>
<intent-filter>
<action android:name=“android.intent.action.BATTERY_LOW” />
</intent-filter>
</receiver>Contoh pendaftaran dinamis dalam kode:
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_LOW);
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);2. Waktu Eksekusi Terbatas:
- Broadcast Receiver hanya memiliki waktu sekitar 5 detik untuk menyelesaikan tugasnya.
- Jika tugas memerlukan waktu lebih lama, seperti mengunduh data atau memproses file, sebaiknya Anda memulai Service atau menggunakan WorkManager.
3. Tugas yang Dapat Dilakukan:
- Mengirim Notifikasi: Memberi tahu pengguna tentang perubahan status, seperti baterai lemah atau koneksi internet terputus.
- Memulai Service: Memulai Service untuk melakukan tugas latar belakang, seperti sinkronisasi data.
- Memperbarui Data: Memperbarui data lokal atau mengirim data ke server.
Jenis-Jenis Broadcast Intent
Broadcast Intent dapat dibagi menjadi dua jenis:
1. Normal Broadcast:
- Dikirim secara asinkronus ke semua Broadcast Receiver yang terdaftar.
- Contoh: ACTION_BOOT_COMPLETED (dikirim saat perangkat selesai booting).
2. Ordered Broadcast:
- Dikirim secara berurutan ke satu Broadcast Receiver pada satu waktu.
- Broadcast Receiver dapat memodifikasi hasil atau menghentikan penyebaran Broadcast Intent.
- Contoh: ACTION_NEW_OUTGOING_CALL (dikirim saat pengguna melakukan panggilan keluar).
Contoh Penggunaan Broadcast Receiver
1. Merespons Perubahan Baterai:
- Broadcast Receiver dapat mendeteksi saat baterai perangkat hampir habis (ACTION_BATTERY_LOW) atau sedang diisi (ACTION_BATTERY_OKAY).
- Contoh: Mengirim notifikasi kepada pengguna saat baterai lemah.
2. Merespons Perubahan Konektivitas Jaringan:
- Broadcast Receiver dapat mendeteksi perubahan koneksi internet (ACTION_CONNECTIVITY_CHANGE).
- Contoh: Menampilkan pesan saat perangkat kehilangan koneksi internet.
3. Merespons Pesan SMS Masuk:
- Broadcast Receiver dapat mendeteksi pesan SMS yang masuk (ACTION_SMS_RECEIVED).
- Contoh: Menampilkan notifikasi atau memproses pesan SMS secara otomatis.
5. Service: Proses Latar Belakang Tanpa UI
Service adalah komponen penting dalam aplikasi Android yang memungkinkan Anda menjalankan tugas di latar belakang tanpa antarmuka pengguna. Service ideal untuk tugas yang perlu terus berjalan meskipun aplikasi tidak aktif, seperti streaming musik, sinkronisasi data, atau pembaruan lokasi.
Dengan menggunakan Service, Anda dapat memastikan bahwa aplikasi Anda tetap berfungsi dengan baik bahkan ketika pengguna tidak berinteraksi langsung dengan aplikasi.
Jenis-Jenis Service
Service dapat dibagi menjadi dua jenis utama:
1. Started Service
Started Service adalah jenis Service yang dimulai oleh komponen lain, seperti Activity atau Broadcast Receiver, dan akan terus berjalan hingga tugasnya selesai.
Cara Kerja:
- Started Service dimulai dengan memanggil metode startService().
- Service akan berjalan di latar belakang hingga tugasnya selesai atau dihentikan secara manual.
- Setelah tugas selesai, Service akan berhenti secara otomatis.
Contoh kode:
Intent intent = new Intent(this, MyStartedService.class);
startService(intent);2. Bound Service
Bound Service adalah jenis Service yang terikat ke komponen lain, seperti Activity atau Fragment, dan akan berjalan selama komponen tersebut aktif.
Cara Kerja:
- Bound Service dimulai dengan memanggil metode bindService().
- Service akan berjalan selama ada komponen yang terikat dengannya.
- Jika semua komponen melepaskan ikatan, Service akan berhenti secara otomatis.
Contoh kode:
Intent intent = new Intent(this, MyBoundService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);Perbedaan Started Service dan Bound Service
| Aspek | Started Service | Bound Service |
| Cara Memulai | Dimulai dengan startService(). | Dimulai dengan bindService(). |
| Durasi | Berjalan hingga tugas selesai atau dihentikan. | Berjalan selama ada komponen yang terikat. |
| Komunikasi | Tidak dapat berkomunikasi langsung dengan komponen lain. | Dapat berkomunikasi langsung dengan komponen yang terikat. |
| Contoh Penggunaan | Streaming musik, sinkronisasi data. | Pemutar musik, komunikasi real-time. |
Contoh Penggunaan Service dalam Aplikasi
1. Aplikasi Musik:
- Started Service: Memutar musik di latar belakang saat aplikasi tidak aktif.
- Bound Service: Mengontrol pemutaran musik dari Activity atau Fragment.
2. Aplikasi Olahraga:
- Started Service: Melacak lokasi pengguna saat berlari atau bersepeda.
- Bound Service: Menampilkan data lokasi dan kecepatan secara real-time di Activity.
3. Aplikasi Chat:
- Started Service: Mengirim dan menerima pesan di latar belakang.
- Bound Service: Menampilkan pesan baru secara real-time di Activity.
6. Content Provider: Berbagi Data Antar Aplikasi
Content Provider adalah komponen penting dalam aplikasi Android yang memungkinkan aplikasi berbagi data dengan aplikasi lain. Dengan menggunakan Content Provider, Anda dapat memberikan akses ke data aplikasi Anda, seperti daftar kontak, file media, atau database, kepada aplikasi lain.
Content Provider juga memungkinkan aplikasi Anda mengakses data dari aplikasi lain, seperti mengakses daftar kontak pengguna atau galeri foto.
Cara Menggunakan Content Provider
Content Provider menyediakan antarmuka yang terstandarisasi untuk mengakses dan memanipulasi data. Data diakses melalui URI (Uniform Resource Identifier) yang ditentukan oleh Content Provider.
1. Mengakses Data dari Content Provider
Untuk mengakses data dari Content Provider, Anda perlu menggunakan ContentResolver dan URI yang sesuai.
Contoh Mengakses Daftar Kontak:
Uri uri = ContactsContract.Contacts.CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d(“Contact”, name);
}
cursor.close();
}2. Menambahkan, Mengubah, atau Menghapus Data
Anda juga dapat menambahkan, mengubah, atau menghapus data melalui Content Provider menggunakan ContentResolver.
Menambahkan Data:
ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, “John Doe”);
Uri newContactUri = getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, values);Mengubah Data:
ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, “Jane Doe”);
getContentResolver().update(ContactsContract.Contacts.CONTENT_URI, values, null, null);Menghapus Data:
getContentResolver().delete(ContactsContract.Contacts.CONTENT_URI, null, null);Contoh Penggunaan Content Provider
1. Aplikasi Kontak:
- Content Provider memungkinkan aplikasi lain mengakses daftar kontak pengguna.
- Contoh: Aplikasi pesan menggunakan Content Provider untuk memilih kontak penerima pesan.
2. Aplikasi Galeri Foto:
- Content Provider memungkinkan aplikasi lain mengakses foto dan video yang disimpan di perangkat.
- Contoh: Aplikasi media sosial menggunakan Content Provider untuk memilih foto yang akan diunggah.
3. Aplikasi Kalender:
- Content Provider memungkinkan aplikasi lain mengakses jadwal dan acara di kalender pengguna.
- Contoh: Aplikasi pengingat menggunakan Content Provider untuk menambahkan acara ke kalender.
7. Application Manifest: Glue yang Menyatukan Aplikasi
Application Manifest adalah file XML yang berfungsi sebagai “lem” yang menyatukan semua komponen aplikasi Android. File ini mendefinisikan struktur aplikasi, termasuk Activity, Service, Broadcast Receiver, Content Provider, serta izin yang diperlukan oleh aplikasi.
Peran Penting Application Manifest
1. Mendefinisikan Komponen Aplikasi:
- Activity: Mendefinisikan layar atau antarmuka pengguna.
- Service: Mendefinisikan proses latar belakang.
- Broadcast Receiver: Mendefinisikan komponen yang merespons pesan sistem.
- Content Provider: Mendefinisikan mekanisme berbagi data.
Contoh definisi Activity di AndroidManifest.xml:
<activity android:name=“.MainActivity”>
<intent-filter>
<action android:name=“android.intent.action.MAIN” />
<category android:name=“android.intent.category.LAUNCHER” />
</intent-filter>
</activity>2. Mendeklarasikan Izin:
- Aplikasi Android memerlukan izin untuk mengakses fitur tertentu, seperti kamera, lokasi, atau internet.
- Izin ini dideklarasikan di AndroidManifest.xml.
Contoh deklarasi izin:
<uses-permission android:name=“android.permission.CAMERA” />
<uses-permission android:name=“android.permission.INTERNET” />3. Mendefinisikan Metadata Aplikasi:
- Application Manifest juga berisi informasi seperti nama aplikasi, ikon, tema, dan versi.
Contoh metadata aplikasi:
<application
android:name=“.MyApplication”
android:icon=“mipmap/ic_launcher”
android:label=“string/app_name”
android:theme=“style/AppTheme”>
</application>8. Application Resources: Aset untuk Antarmuka Pengguna
Aplikasi Android menyimpan sumber daya seperti string, gambar, font, dan tata letak UI dalam direktori /res. Sumber daya ini dikelola secara terpisah dari kode program, memungkinkan Anda untuk dengan mudah menyesuaikan aplikasi untuk berbagai perangkat, bahasa, dan orientasi layar.
Jenis-Jenis Sumber Daya
1. String: Teks yang digunakan dalam aplikasi, seperti judul, pesan, atau label.
Disimpan di res/values/strings.xml.
Contoh:
<string name=“app_name”>My App</string>
<string name=“welcome_message”>Welcome to My App!</string>2. Gambar: Aset visual seperti ikon, gambar latar belakang, atau ilustrasi.
Disimpan di res/drawable/ atau res/mipmap/.
Contoh: ic_launcher.png, background.jpg.
3. Tata Letak (Layout): File XML yang mendefinisikan struktur antarmuka pengguna.
Disimpan di res/layout/.
Contoh: activity_main.xml, fragment_detail.xml.
4. Warna: Definisi warna yang digunakan dalam aplikasi.
Disimpan di res/values/colors.xml.
Contoh:
<color name=“primary_color”>6200EE</color>
<color name=“secondary_color”>03DAC6</color>5. Dimensi: Ukuran dan padding yang digunakan dalam tata letak.
Disimpan di res/values/dimens.xml.
Contoh:
<dimen name=“padding_small”>8dp</dimen>
<dimen name=“text_size_large”>24sp</dimen>Mengakses Sumber Daya melalui Kelas R
Saat aplikasi dikompilasi, Android secara otomatis menghasilkan kelas R yang berisi referensi ke semua sumber daya yang didefinisikan di direktori /res. Anda dapat mengakses sumber daya ini melalui kelas R dalam kode program.
Contoh Mengakses String:
String appName = getString(R.string.app_name);Contoh Mengakses Gambar:
ImageView imageView = findViewById(R.id.my_image_view);
imageView.setImageResource(R.drawable.ic_launcher);Contoh Mengakses Tata Letak:
setContentView(R.layout.activity_main);Kesimpulan
Dengan memahami komponen utama seperti Activity, Fragment, Intent, dan Service, Anda dapat membangun aplikasi Android yang lebih efisien, modular, dan mudah dikelola. Setiap komponen memiliki peran khusus yang memungkinkan aplikasi berfungsi dengan baik, baik di latar depan (foreground) maupun latar belakang (background).
Selain itu, komponen seperti Broadcast Receiver dan Content Provider memungkinkan aplikasi Anda merespons perubahan sistem dan berbagi data dengan aplikasi lain.
Dengan memanfaatkan Application Manifest dan Application Resources, Anda dapat mendefinisikan struktur aplikasi dan mengelola aset seperti string, gambar, dan tata letak dengan lebih terorganisir.


