Pengantar Aktivitas

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

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

Konsep aktivitas

Pengalaman aplikasi seluler berbeda dengan 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 membuka aplikasi email dari layar utama, Anda mungkin melihat daftar email. Sebaliknya, jika Anda 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 pemanggil 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. Jendela tersebut 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 mungkin menerapkan layar Preferensi, sementara aktivitas lainnya menerapkan layar Pilih Foto.

Sebagian besar aplikasi berisi beberapa layar, yang artinya bahwa aplikasi terdiri dari banyak aktivitas. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas utama, yang merupakan layar pertama yang muncul saat pengguna meluncurkan aplikasi. Setiap aktivitas dapat memulai aktivitas lain untuk melakukan tindakan yang berbeda. Misalnya, aktivitas utama dalam aplikasi email sederhana dapat memberikan 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 terikat secara bebas dengan aktivitas lainnya; biasanya ada dependensi minimal di antara aktivitas dalam aplikasi. Bahkan, aktivitas sering kali memulai aktivitas yang dimiliki oleh aplikasi lain. Misalnya, aplikasi browser mungkin meluncurkan aktivitas Berbagi di aplikasi media sosial.

Untuk menggunakan aktivitas pada 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 Anda dan tambahkan elemen <activity> sebagai turunan dari elemen <application>. Contoh:

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

Atribut yang diperlukan untuk elemen ini adalah android:name, yang menentukan 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 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 informasi selengkapnya tentang perubahan yang harus dihindari setelah memublikasikan, lihat Hal-Hal yang Tidak Boleh 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 memberitahukan sistem untuk “Memulai aktivitas Kirim Email pada aplikasi Gmail”. Sebaliknya, permintaan implisit memberi tahu sistem untuk “Memulai layar Kirim Email dalam aktivitas apa pun yang dapat melakukan tugas”. Saat UI sistem bertanya kepada pengguna aplikasi mana yang harus digunakan dalam menjalankan tugas, itu adalah filter intent yang bekerja.

Anda dapat memanfaatkan fitur ini dengan mendeklarasikan atribut <intent-filter> pada elemen <activity>. Definisi elemen ini mencakup elemen <action> dan, secara opsional, elemen <category> dan/atau elemen <data>. Elemen ini digabungkan untuk menentukan jenis intent yang dapat ditanggapi 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 untuk menerima permintaan peluncuran. Elemen <data> menentukan jenis data yang dapat dikirimkan 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 ingin agar aplikasi Anda mandiri dan tidak mengizinkan aplikasi lain untuk mengaktifkan aktivitasnya, Anda tidak perlu filter intent lainnya. Aktivitas yang tidak ingin Anda sediakan untuk aplikasi lain seharusnya tidak memiliki filter intent, dan Anda dapat memulainya sendiri dengan intent eksplisit. Untuk informasi selengkapnya cara aktivitas Anda dapat merespons intent, lihat Intent dan Intent Filter.

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 tersebut memiliki izin yang sama dalam manifesnya. Jika Anda mendeklarasikan elemen <uses-permission> untuk aktivitas induk, setiap aktivitas turunan harus memiliki elemen <uses-permission> yang sesuai.

Misalnya, jika aplikasi Anda ingin menggunakan aplikasi hipotetis bernama SocialApp untuk berbagi postingan di media sosial, SocialApp sendiri harus menentukan izin yang harus dimiliki 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 disetel 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 harus membuat tampilan dan menautkan 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 merupakan persiapan akhir aktivitas untuk dikirim ke latar depan dan menjadi interaktif.

onResume()

Sistem memanggil callback ini sebelum aktivitas mulai berinteraksi dengan pengguna. Pada tahap ini, aktivitas berada di bagian atas tumpukan aktivitas, dan mencatat semua input pengguna. Sebagian besar fungsi inti aplikasi diimplementasikan dalam metode onResume().

Callback onPause() selalu mengikuti onResume().

onPause()

Sistem memanggil onPause() saat aktivitas kehilangan fokus dan memasuki status Dijeda. Status ini terjadi ketika, misalnya, pengguna mengetuk tombol Kembali atau Terbaru. Saat sistem memanggil onPause() untuk aktivitas Anda, secara teknis berarti aktivitas Anda masih terlihat sebagian, tetapi yang paling sering adalah 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 untuk diupdate. Contoh aktivitas tersebut mencakup salah satu yang menampilkan layar peta navigasi atau pemutar media yang sedang diputar. Bahkan jika aktivitas tersebut kehilangan fokus, pengguna mengharapkan UI untuk melanjutkan update.

Anda tidak perlu menggunakan onPause() untuk menyimpan aplikasi atau data pengguna, melakukan panggilan jaringan, atau menjalankan transaksi database. Untuk informasi tentang cara 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 diakhiri, 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 oleh sistem adalah onRestart(), jika aktivitas akan 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 pada waktu ketika aktivitas dihentikan.

Callback ini selalu diikuti oleh onStart().

onDestroy()

Sistem memanggil callback ini sebelum aktivitas diakhiri.

Callback ini adalah panggilan terakhir yang diterima aktivitas. onDestroy() biasanya diterapkan untuk memastikan bahwa semua resource aktivitas akan dilepas jika aktivitas atau proses yang berisi callback tersebut diakhiri.

Bagian ini hanya memberikan pengenalan tentang topik ini. Untuk penanganan siklus hidup aktivitas dan callback-nya yang lebih mendetail, lihat Siklus Hidup Aktivitas.