Class Activity
adalah komponen penting dari aplikasi
Android, dan cara aktivitas diluncurkan dan dikumpulkan adalah bagian
dasar dari model aplikasi platform. Tidak seperti paradigma pemrograman
yang meluncurkan aplikasi dengan metode main()
, sistem
Android memulai kode dalam instance Activity
dengan
memanggil metode callback tertentu yang sesuai dengan tahap tertentu
siklus prosesnya.
Dokumen ini memperkenalkan konsep aktivitas, lalu memberikan beberapa panduan ringan tentang cara menggunakannya. Untuk mengetahui informasi tambahan tentang praktik terbaik dalam merancang aplikasi, lihat Panduan Arsitektur Aplikasi.
Konsep aktivitas
Pengalaman aplikasi seluler berbeda dengan versi desktopnya karena interaksi pengguna dengan aplikasi tidak selalu dimulai di tempat yang sama. Sebaliknya, perjalanan pengguna sering kali dimulai dengan cara yang tidak dapat diduga. Misalnya, jika membuka aplikasi email dari layar utama, Anda mungkin akan melihat daftar email. Sebaliknya, jika menggunakan aplikasi media sosial yang kemudian meluncurkan aplikasi email, Anda dapat langsung membuka layar aplikasi email untuk menulis email.
Class Activity
dirancang untuk memfasilitasi paradigma ini.
Jika satu aplikasi memanggil aplikasi lainnya, aplikasi panggilan akan memanggil aktivitas di aplikasi
lain, bukan aplikasi sebagai keseluruhan atomik. Dengan cara ini, aktivitas berfungsi sebagai
titik masuk untuk interaksi aplikasi dengan pengguna. Anda menerapkan
aktivitas sebagai subclass dari class Activity
.
Aktivitas menyediakan jendela tempat aplikasi menggambar UI-nya. Jendela ini biasanya mengisi layar, tetapi mungkin lebih kecil dari layar dan mengambang di atas jendela lain. Umumnya, satu aktivitas menerapkan satu layar dalam aplikasi. Misalnya, salah satu aktivitas aplikasi dapat mengimplementasikan layar Preferensi, sementara aktivitas lain menerapkan layar Pilih Foto.
Sebagian besar aplikasi berisi beberapa layar, yang berarti aplikasi terdiri dari beberapa aktivitas. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas utama, yang merupakan layar pertama yang muncul saat pengguna meluncurkan aplikasi. Setiap aktivitas selanjutnya dapat memulai aktivitas lain untuk melakukan tindakan yang berbeda. Misalnya, aktivitas utama dalam aplikasi email sederhana mungkin menyediakan layar yang menampilkan kotak masuk email. Dari sana, aktivitas utama dapat meluncurkan aktivitas lain yang menyediakan layar untuk tugas seperti menulis email dan membuka email satu per satu.
Meskipun aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi, setiap aktivitas hanya terikat secara longgar dengan aktivitas lainnya; biasanya ada dependensi minimal di antara aktivitas dalam aplikasi. Bahkan, aktivitas sering memulai aktivitas milik aplikasi lain. Misalnya, aplikasi browser mungkin meluncurkan aktivitas Berbagi di aplikasi media sosial.
Untuk menggunakan aktivitas di aplikasi, Anda harus mendaftarkan informasi tentang aktivitas tersebut dalam manifes aplikasi, dan Anda harus mengelola siklus proses aktivitas dengan tepat. Bagian lain dokumen ini memperkenalkan topik ini.
Mengonfigurasi manifes
Agar aplikasi dapat menggunakan aktivitas, Anda harus mendeklarasikan aktivitas dan beberapa atributnya, dalam manifes.
Mendeklarasikan aktivitas
Untuk mendeklarasikan aktivitas, buka file manifes dan tambahkan elemen <activity> sebagai turunan elemen <application>. Contoh:
<manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application ... > ... </manifest >
Satu-satunya atribut yang diperlukan untuk elemen ini adalah android:name, yang menentukan nama kelas aktivitas. Anda juga dapat menambahkan atribut yang menentukan karakteristik aktivitas seperti label, ikon, atau tema UI. Untuk mengetahui informasi selengkapnya tentang atribut ini dan atribut lainnya, lihat dokumentasi referensi elemen <activity>.
Catatan: Setelah memublikasikan aplikasi, Anda tidak boleh mengubah nama aktivitas. Jika Anda melakukannya, beberapa fungsi mungkin terganggu, seperti pintasan app. Untuk mengetahui informasi selengkapnya tentang perubahan yang harus dihindari setelah dipublikasikan, lihat Hal-hal yang Tidak Dapat Diubah.
Mendeklarasikan filter intent
Filter intent adalah fitur yang sangat canggih pada platform Android. Fitur ini memberikan kemampuan untuk meluncurkan aktivitas berdasarkan tidak hanya pada permintaan eksplisit, tetapi juga permintaan implisit. Misalnya, permintaan eksplisit mungkin memberi tahu sistem untuk “Memulai aktivitas Kirim Email di aplikasi Gmail". Sebaliknya, permintaan implisit memberi tahu sistem untuk "Memulai layar Kirim Email dalam aktivitas apa pun yang dapat melakukan tugas". Saat UI sistem menanyakan kepada pengguna aplikasi mana yang akan digunakan dalam menjalankan tugas, itulah filter intent yang sedang digunakan.
Anda dapat memanfaatkan fitur ini dengan mendeklarasikan atribut <intent-filter> dalam elemen <activity>. Definisi elemen ini mencakup elemen <action> dan, secara opsional, elemen <category> dan/atau elemen <data>. Elemen-elemen ini digabungkan untuk menentukan jenis intent yang dapat direspons oleh aktivitas Anda. Misalnya, cuplikan kode berikut menunjukkan cara mengonfigurasi aktivitas yang mengirim data teks, dan menerima permintaan dari aktivitas lain untuk melakukannya:
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
Dalam
contoh ini, elemen <action>
menetapkan bahwa aktivitas ini mengirimkan data.
Mendeklarasikan elemen <category>
sebagai DEFAULT
akan memungkinkan aktivitas
menerima permintaan peluncuran. Elemen <data>
menetapkan jenis data yang
dapat dikirim oleh aktivitas ini. Cuplikan kode berikut menunjukkan cara memanggil
aktivitas yang dijelaskan di atas:
Kotlin
val sendIntent = Intent().apply { action = Intent.ACTION_SEND type = "text/plain" putExtra(Intent.EXTRA_TEXT, textMessage) } startActivity(sendIntent)
Java
// Create the text message with a string Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage); // Start the activity startActivity(sendIntent);
Mendeklarasikan izin
Anda dapat menggunakan tag
<activity>
manifes untuk mengontrol
aplikasi mana yang dapat memulai aktivitas tertentu. Aktivitas induk tidak dapat meluncurkan
aktivitas turunan kecuali jika kedua aktivitas memiliki izin yang sama dalam
manifesnya. Jika Anda mendeklarasikan elemen
<uses-permission>
untuk aktivitas induk, setiap aktivitas turunan harus memiliki elemen
<uses-permission>
yang cocok.
Misalnya, jika aplikasi Anda ingin menggunakan aplikasi fiktif bernama SocialApp untuk membagikan postingan di media sosial, SocialApp harus menentukan izin yang harus dimiliki oleh aplikasi yang memanggilnya:
<manifest> <activity android:name="...." android:permission=”com.google.socialapp.permission.SHARE_POST” />
Kemudian, agar diizinkan memanggil SocialApp, aplikasi Anda harus cocok dengan izin yang ditetapkan dalam manifes SocialApp:
<manifest> <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" /> </manifest>
Untuk informasi selengkapnya tentang izin dan keamanan secara umum, lihat Keamanan dan Izin.
Mengelola siklus hidup aktivitas
Selama masa siklusnya berjalan, aktivitas melalui beberapa status. Anda menggunakan serangkaian callback untuk menangani transisi antar-status. Bagian berikut memperkenalkan callback ini.
onCreate()
Anda harus menerapkan callback ini, yang diaktifkan saat sistem membuat
aktivitas Anda. Implementasi Anda harus menginisialisasi komponen penting dari
aktivitas Anda: Misalnya, aplikasi harus membuat tampilan dan mengikat data ke
daftar di sini. Yang terpenting, ini adalah tempat Anda harus memanggil
setContentView()
untuk menentukan tata letak antarmuka pengguna aktivitas.
Setelah onCreate()
selesai, callback berikutnya selalu onStart()
.
onStart()
Saat onCreate()
keluar, aktivitas
memasuki status Dimulai, dan aktivitas menjadi terlihat oleh pengguna.
Callback ini berisi persiapan akhir aktivitas untuk
datang ke latar depan dan menjadi interaktif.
onResume()
Sistem memanggil callback ini tepat sebelum aktivitas mulai berinteraksi
dengan pengguna. Pada tahap ini, aktivitas berada di bagian atas stack aktivitas, dan menangkap semua input pengguna. Sebagian besar fungsi inti aplikasi
diterapkan dalam metode onResume()
.
Callback onPause()
selalu
mengikuti onResume()
.
onPause()
Sistem memanggil onPause()
saat aktivitas kehilangan
fokus dan memasuki status Dijeda. Status ini terjadi saat, misalnya, pengguna
mengetuk tombol Kembali atau Terbaru. Saat sistem memanggil
onPause()
untuk aktivitas Anda,
secara teknis ini berarti aktivitas Anda masih terlihat sebagian, namun yang paling sering merupakan indikasi bahwa
pengguna meninggalkan aktivitas, dan aktivitas tersebut akan segera memasuki status
Berhenti atau Dilanjutkan.
Aktivitas dalam status Dijeda dapat terus mengupdate UI jika pengguna mengharapkan UI diupdate. Contoh aktivitas tersebut antara lain menampilkan layar peta navigasi atau pemutar media yang sedang diputar. Meskipun aktivitas tersebut kehilangan fokus, pengguna mengharapkan UI mereka untuk terus diupdate.
Anda tidak boleh menggunakan
onPause()
untuk menyimpan data aplikasi atau
pengguna, melakukan panggilan jaringan, atau menjalankan transaksi database.
Untuk informasi tentang menyimpan data, lihat
Menyimpan dan memulihkan status aktivitas.
Setelah onPause()
selesai dijalankan, callback berikutnya adalah onStop()
atau onResume()
, bergantung pada apa yang terjadi setelah aktivitas memasuki status Dijeda.
onStop()
Sistem memanggil onStop()
saat
aktivitas tidak lagi terlihat oleh pengguna.
Hal ini dapat terjadi karena aktivitas sedang dihancurkan, aktivitas baru
dimulai, atau aktivitas yang ada memasuki
status Dilanjutkan dan menutupi aktivitas yang dihentikan.
Dalam semua kasus ini, aktivitas yang dihentikan tidak lagi
terlihat sama sekali.
Callback berikutnya yang dipanggil sistem adalah
onRestart()
, jika
aktivitas kembali berinteraksi dengan pengguna, atau oleh
onDestroy()
jika aktivitas ini benar-benar dihentikan.
onRestart()
Sistem memanggil callback ini jika aktivitas dalam status Berhenti
akan dimulai ulang. onRestart()
memulihkan status aktivitas sejak dihentikan.
Callback ini selalu diikuti oleh
onStart()
.
onDestroy()
Sistem memanggil callback ini sebelum aktivitas dihancurkan.
Callback ini adalah panggilan terakhir yang diterima aktivitas.
onDestroy()
biasanya
diimplementasikan untuk memastikan bahwa semua resource aktivitas
dilepaskan saat aktivitas, atau proses yang berisinya, diakhiri.
Bagian ini hanya memberikan pengenalan tentang topik ini. Untuk penanganan yang lebih detail tentang siklus proses aktivitas dan callback-nya, lihat Siklus Proses Aktivitas.