Pengantar aktivitas

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);
Jika Anda ingin aplikasi bersifat mandiri dan tidak mengizinkan aplikasi lain mengaktifkan aktivitasnya, Anda tidak memerlukan filter intent lainnya. Aktivitas yang tidak ingin Anda sediakan untuk aplikasi lain tidak boleh memiliki filter intent, dan Anda dapat memulainya sendiri menggunakan intent eksplisit. Untuk mengetahui informasi selengkapnya tentang cara aktivitas Anda dapat merespons intent, lihat Intent dan Filter Intent.

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.