Pengantar aktivitas

Class Activity adalah komponen penting Android aplikasi, dan cara aktivitas diluncurkan serta disatukan adalah hal dari model aplikasi platform. Tidak seperti paradigma pemrograman di aplikasi mana yang diluncurkan dengan metode main(), metode Android sistem memulai kode dalam instance Activity dengan memanggil metode callback tertentu yang sesuai dengan tahapan tertentu siklus hidupnya.

Dokumen ini memperkenalkan konsep aktivitas, dan kemudian memberikan beberapa panduan ringan tentang cara bekerja dengan mereka. Untuk informasi tambahan tentang praktik terbaik dalam merancang aplikasi, lihat Panduan Arsitektur Aplikasi.

Konsep aktivitas

Pengalaman aplikasi seluler berbeda dengan pada versi desktop 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 Anda membuka aplikasi email dari layar utama, Anda mungkin melihat daftar email. Sebaliknya, jika Anda menggunakan aplikasi media sosial yang meluncurkan aplikasi email, Anda mungkin langsung ke layar aplikasi email untuk menulis email.

Class Activity dirancang untuk memfasilitasi paradigma ini. Saat satu aplikasi memanggil aplikasi lain, aplikasi panggilan akan memanggil aktivitas di aplikasi lainnya aplikasi, bukan aplikasi sebagai satu kesatuan atomik. Dengan cara ini, aktivitas berfungsi sebagai titik masuk untuk interaksi aplikasi dengan pengguna. Anda mengimplementasikan sebuah aktivitas sebagai subclass dari class Activity.

Aktivitas menyediakan jendela tempat aplikasi menggambar UI-nya. Jendela ini biasanya mengisi layar, tetapi mungkin lebih kecil daripada layar dan mengambang di atas jendela lain. Umumnya, satu aktivitas mengimplementasikan satu layar dalam sebuah aplikasi. Misalnya, salah satu aktivitas aplikasi mungkin menerapkan layar Preferences, saat aktivitas lain menerapkan di layar Pilih Foto.

Sebagian besar aplikasi berisi beberapa layar, yang artinya terdiri dari beberapa aktivitas Anda. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai utama aktivitas, yaitu layar pertama yang muncul saat pengguna meluncurkan aplikasi. Setiap aktivitas kemudian dapat memulai aktivitas lain untuk melakukan tindakan yang berbeda. Misalnya, aktivitas utama dalam email sederhana dapat menyediakan layar yang menampilkan kotak masuk email. Dari sana, bagian utama mungkin meluncurkan aktivitas lain yang menyediakan layar untuk tugas seperti menulis e-mail dan membuka masing-masing e-mail.

Meskipun aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi, setiap aktivitas hanya terikat longgar ke aktivitas lain; ada biasanya ketergantungan minimal di antara aktivitas dalam aplikasi. Bahkan, sering kali memicu aktivitas milik aplikasi lain. Misalnya, aplikasi {i>browser<i} mungkin meluncurkan aktivitas {i>Share<i} dari aplikasi media sosial.

Untuk menggunakan aktivitas di aplikasi, Anda harus mendaftarkan informasi tentang aktivitas tersebut di 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 tersebut, dan tertentu di atributnya, dalam manifes.

Mendeklarasikan aktivitas

Untuk mendeklarasikan aktivitas, buka file manifes dan tambahkan <aktivitas> sebagai turunan dari <aplikasi> . Contoh:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

Satu-satunya atribut yang diperlukan untuk elemen ini adalah android:name, yang menetapkan nama class aktivitas. Anda juga dapat menambahkan atribut yang menentukan karakteristik aktivitas seperti label, ikon, atau tema UI. Untuk informasi selengkapnya tentang atribut ini dan atribut lainnya, lihat <aktivitas> dokumentasi referensi elemen.

Catatan: Setelah memublikasikan aplikasi, Anda tidak boleh mengubah aktivitas nama. Jika Anda melakukannya, beberapa fungsi mungkin terganggu, seperti pintasan app. Untuk mengetahui informasi selengkapnya tentang perubahan yang harus dihindari setelah publikasi, lihat Hal-hal yang Tidak Bisa Diubah.

Mendeklarasikan filter intent

Filter intent adalah fitur yang sangat canggih di platform Android. Mereka menyediakan kemampuan untuk meluncurkan aktivitas tidak hanya berdasarkan 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 ke “Memulai layar Kirim Email dalam yang dapat melakukan pekerjaannya." Saat UI sistem bertanya kepada pengguna aplikasi mana yang akan digunakan dalam melakukan tugas, itu adalah filter {i>intent<i} yang bekerja.

Anda dapat memanfaatkan fitur ini dengan mendeklarasikan <filter-intent> dalam <activity>. Definisi elemen ini meliputi <action> dan, secara opsional, <kategori> dan/atau <data> . Elemen-elemen ini gabungkan untuk menetapkan jenis intent yang dapat direspons aktivitas Anda. Sebagai dalam contoh, cuplikan kode berikut menunjukkan cara mengonfigurasi aktivitas yang mengirimkan 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>

Di sini contoh, <action> menetapkan bahwa aktivitas ini mengirimkan data. Mendeklarasikan <category> sebagai DEFAULT akan mengaktifkan aktivitas untuk menerima permintaan peluncuran. <data> menentukan tipe data yang yang bisa dikirim oleh aktivitas ini. Cuplikan kode berikut menunjukkan cara memanggil metode 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 Anda bersifat mandiri dan tidak mengizinkan aplikasi lain untuk diaktifkan aktivitasnya, Anda tidak memerlukan filter intent lainnya. Aktivitas yang tidak ingin Anda lakukan yang tersedia untuk aplikasi lain seharusnya tidak memiliki filter intent, dan Anda bisa memulainya sendiri menggunakan intent eksplisit. Untuk informasi selengkapnya tentang cara aktivitas Anda dapat merespons intent, lihat Intent dan Filter Intent.

Mendeklarasikan izin

Anda bisa menggunakan atribut Tag <activity> untuk mengontrol aplikasi mana yang dapat memulai aktivitas tertentu. Aktivitas induk tidak dapat meluncurkan aktivitas turunan kecuali jika kedua aktivitas memiliki izin yang sama di manifes. Jika Anda mendeklarasikan <uses-permission> untuk aktivitas induk, setiap aktivitas turunan harus memiliki <uses-permission> .

Misalnya, jika aplikasi Anda ingin menggunakan aplikasi fiktif bernama SocialApp untuk membagikan postingan di media sosial, SocialApp harus menetapkan izin aplikasi yang memanggilnya harus memiliki:

<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 di 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 Anda harus membuat tampilan dan mengikat data ke daftar di sini. Yang terpenting, ini adalah saat Anda harus memanggil setContentView() untuk mendefinisikan tata letak antarmuka pengguna aktivitas.

Saat 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 muncul 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 aktivitas menumpuk, dan merekam semua input pengguna. Sebagian besar fungsi inti aplikasi yang diimplementasikan dalam metode onResume().

Callback onPause() selalu mengikuti onResume().

onPause()

Sistem memanggil onPause() saat aktivitas kalah dan memasuki status Dijeda. Status ini terjadi ketika, misalnya, pengguna mengetuk tombol Kembali atau Terbaru. Saat sistem memanggil onPause() untuk aktivitas Anda, secara teknis itu berarti aktivitas Anda masih terlihat sebagian, tetapi paling sering merupakan indikasi bahwa pengguna keluar dari aktivitas, dan aktivitas akan segera memasuki Status dihentikan atau Dilanjutkan.

Sebuah aktivitas dalam status Dijeda dapat terus memperbarui UI jika pengguna mengharapkan UI diperbarui. Contoh aktivitas tersebut antara lain yang menunjukkan navigasi layar peta atau pemutar media sedang diputar. Bahkan jika aktivitas tersebut kehilangan fokus, pengguna mengharapkan UI mereka terus diupdate.

Anda tidak boleh menggunakan onPause() untuk menyimpan aplikasi atau pengguna data, melakukan panggilan jaringan, atau menjalankan transaksi {i>database<i}. Untuk informasi tentang menyimpan data, lihat Menyimpan dan memulihkan status aktivitas.

Setelah onPause() selesai dieksekusi, callback berikutnya adalah onStop() atau onResume(), bergantung pada terjadi setelah aktivitas memasuki status Dijeda.

onStop()

Sistem memanggil onStop() saat aktivitas tidak lagi terlihat oleh pengguna. Ini mungkin terjadi karena aktivitas sedang dihancurkan, aktivitas baru memulai, atau aktivitas yang ada memasuki status Dilanjutkan dan menutupi aktivitas yang dihentikan. Di semua kasus ini, aktivitas yang dihentikan tidak lagi tidak terlihat sama sekali.

Callback berikutnya yang dipanggil sistem adalah onRestart(), jika aktivitas kembali untuk berinteraksi dengan pengguna, atau dengan 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() sama dengan biasanya diterapkan untuk memastikan bahwa semua sumber daya aktivitas dirilis saat aktivitas, atau proses yang memuatnya, dihancurkan.

Bagian ini hanya memberikan pengenalan tentang topik ini. Untuk perlakuan mendetail dari siklus proses aktivitas dan callback-nya, lihat Aktivitas Siklus proses.