Home | History | Annotate | Download | only in components
      1 page.title=Aktivitas
      2 page.tags=aktivitas,intent
      3 @jd:body
      4 
      5 <div id="qv-wrapper">
      6 <div id="qv">
      7 <h2>Dalam dokumen ini</h2>
      8 <ol>
      9   <li><a href="#Creating">Membuat Aktivitas</a>
     10     <ol>
     11       <li><a href="#UI">Mengimplementasikan antarmuka pengguna</a></li>
     12       <li><a href="#Declaring">Mendeklarasikan aktivitas dalam manifes</a></li>
     13     </ol>
     14   </li>
     15   <li><a href="#StartingAnActivity">Memulai Aktivitas</a>
     16     <ol>
     17       <li><a href="#StartingAnActivityForResult">Memulai aktivitas agar berhasil</a></li>
     18     </ol>
     19   </li>
     20   <li><a href="#ShuttingDown">Mematikan Aktivitas</a></li>
     21   <li><a href="#Lifecycle">Mengelola Daur Hidup Aktivitas</a>
     22     <ol>
     23       <li><a href="#ImplementingLifecycleCallbacks">Mengimplementasikan callback daur hidup</a></li>
     24       <li><a href="#SavingActivityState">Menyimpan status aktivitas</a></li>
     25       <li><a href="#ConfigurationChanges">Menangani perubahan konfigurasi</a></li>
     26       <li><a href="#CoordinatingActivities">Mengoordinasikan aktivitas</a></li>
     27     </ol>
     28   </li>
     29 </ol>
     30 
     31 <h2>Kelas-kelas utama</h2>
     32 <ol>
     33   <li>{@link android.app.Activity}</li>
     34 </ol>
     35 
     36 <h2>Lihat juga</h2>
     37 <ol>
     38   <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan
     39 Back-Stack</a></li>
     40 </ol>
     41 
     42 </div>
     43 </div>
     44 
     45 
     46 
     47 <p>{@link android.app.Activity} adalah sebuah komponen aplikasi yang menyediakan layar yang digunakan
     48 pengguna untuk berinteraksi guna melakukan sesuatu, misalnya memilih nomor telepon, mengambil foto, mengirim email, atau
     49 menampilkan peta. Tiap aktivitas diberi sebuah jendela untuk menggambar antarmuka penggunanya. Jendela ini
     50 biasanya mengisi layar, namun mungkin lebih kecil daripada layar dan mengambang di atas
     51 jendela lain.</p>
     52 
     53 <p> Sebuah aplikasi biasanya terdiri atas beberapa aktivitas yang terikat secara longgar
     54 satu sama lain. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas "utama", yang
     55 ditampilkan kepada pengguna saat membuka aplikasi untuk pertama kali. Tiap
     56 aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali 
     57 aktivitas baru dimulai, aktivitas sebelumnya akan dihentikan, namun sistem mempertahankan aktivitas
     58 dalam sebuah tumpukan ("back-stack"). Bila sebuah aktivitas baru dimulai, aktivitas itu akan didorong ke atas back-stack dan
     59 mengambil fokus pengguna. Back-stack mematuhi mekanisme dasar tumpukan "masuk terakhir, keluar pertama",
     60 jadi, bila pengguna selesai dengan aktivitas saat ini dan menekan tombol <em>Back</em>, aktivitas
     61 akan dikeluarkan dari tumpukan (dan dimusnahkan) dan aktivitas sebelumnya akan dilanjutkan. (Back-stack
     62 dibahas selengkapnya dalam dokumen <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas
     63 dan Back-Stack</a>.)</p>
     64 
     65 <p>Bila aktivitas dihentikan karena ada aktivitas baru yang dimulai, aktivitas lama akan diberi tahu tentang perubahan status ini
     66 melalui metode callback daur hidupnya.
     67 Ada beberapa metode callback yang mungkin diterima aktivitas, karena sebuah perubahan dalam
     68 statusnya&mdash;apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya&mdash;dan
     69 masing-masing callback memberi Anda kesempatan melakukan pekerjaan tertentu yang
     70 sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas 
     71 objek besar, seperti koneksi jaringan atau database. Bila aktivitas dilanjutkan, Anda bisa
     72 memperoleh kembali sumber daya yang diperlukan dan melanjutkan tindakan yang terputus. Transisi status ini
     73 semuanya bagian dari daur hidup aktivitas.</p>
     74 
     75 <p>Bagian selebihnya dari dokumen ini membahas dasar-dasar cara membuat dan menggunakan aktivitas,
     76 yang meliputi satu pembahasan lengkap tentang cara kerja daur hidup aktivitas, sehingga Anda bisa dengan benar mengelola
     77 transisi di antara berbagai status aktivitas.</p>
     78 
     79 
     80 
     81 <h2 id="Creating">Membuat Aktivitas</h2>
     82 
     83 <p>Untuk membuat sebuah aktivitas, Anda harus membuat subkelas {@link android.app.Activity} (atau
     84 subkelasnya yang ada). Dalam subkelas itu, Anda perlu mengimplementasikan metode-metode callback yang
     85 dipanggil sistem saat aktivitas bertransisi di antara berbagai status daur hidupnya, misalnya saat
     86 aktivitas sedang dibuat, dihentikan, dilanjutkan, atau dimusnahkan. Dua metode callback
     87 terpenting adalah:</p>
     88 
     89 <dl>
     90   <dt>{@link android.app.Activity#onCreate onCreate()}</dt>
     91   <dd>Anda harus mengimplementasikan metode ini. Sistem memanggilnya saat membuat
     92     aktivitas Anda. Dalam implementasi, Anda harus menginisialisasi komponen-komponen esensial 
     93 aktivitas.
     94     Yang terpenting, inilah tempat Anda harus memanggil {@link android.app.Activity#setContentView
     95     setContentView()} untuk mendefinisikan layout untuk antarmuka pengguna aktivitas.</dd>
     96   <dt>{@link android.app.Activity#onPause onPause()}</dt>
     97   <dd>Sistem memanggil metode ini sebagai pertanda pertama bahwa pengguna sedang meninggalkan
     98 aktivitas Anda (walau itu tidak selalu berarti aktivitas sedang dimusnahkan). Inilah biasanya tempat Anda
     99 harus mengikat setiap perubahan yang harus dipertahankan selepas sesi pengguna saat ini (karena
    100 pengguna mungkin tidak kembali).</dd>
    101 </dl>
    102 
    103 <p>Ada beberapa metode callback daur hidup lainnya yang harus Anda gunakan untuk memberikan
    104 pengalaman pengguna yang mengalir di antara aktivitas dan menangani interupsi tidak terduga yang menyebabkan aktivitas Anda
    105 dihentikan dan bahkan dimusnahkan. Semua metode callback daur hidup akan dibahas nanti, di
    106 bagian tentang <a href="#Lifecycle">Mengelola Daur Hidup Aktivitas</a>.</p>
    107 
    108 
    109 
    110 <h3 id="UI">Mengimplementasikan antarmuka pengguna</h3>
    111 
    112 <p> Antarmuka pengguna aktivitas disediakan oleh hierarki objek&mdash;tampilan yang diturunkan
    113 dari kelas {@link android.view.View}.  Tiap tampilan mengontrol sebuah ruang persegi panjang tertentu
    114 dalam jendela aktivitas dan bisa merespons interaksi pengguna. Misalnya, sebuah tampilan mungkin berupa sebuah
    115 tombol yang mengawali suatu tindakan bila pengguna menyentuhnya.</p>
    116 
    117 <p>Android menyediakan sejumlah tampilan siap-dibuat yang bisa Anda gunakan untuk mendesain dan mengatur
    118 layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar, 
    119 misalnya tombol, bidang teks, kotak cek, atau sekadar sebuah gambar. "Layout" adalah tampilan yang diturunkan dari {@link
    120 android.view.ViewGroup} yang memberikan sebuah model layout unik untuk tampilan anaknya, misalnya
    121 layout linier, layout grid, atau layout relatif. Anda juga bisa mensubkelaskan kelas-kelas {@link android.view.View} dan
    122 {@link android.view.ViewGroup} (atau subkelas yang ada) untuk membuat widget dan
    123 layout Anda sendiri dan menerapkannya ke layout aktivitas Anda.</p>
    124 
    125 <p>Cara paling umum untuk mendefinisikan layout dengan menggunakan tampilan adalah dengan file layout XML yang disimpan dalam
    126 sumber daya aplikasi Anda. Dengan cara ini, Anda bisa memelihara desain antarmuka pengguna Anda secara terpisah dari
    127 kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI 
    128 aktivitas Anda dengan {@link android.app.Activity#setContentView(int) setContentView()}, dengan meneruskan
    129 ID sumber daya untuk layout itu. Akan tetapi, Anda juga bisa membuat {@link android.view.View} baru dalam
    130 kode aktivitas dan membuat hierarki tampilan dengan menyisipkan {@link
    131 android.view.View} baru ke dalam {@link android.view.ViewGroup}, kemudian menggunakan layout itu dengan meneruskan akar
    132 {@link android.view.ViewGroup} ke {@link android.app.Activity#setContentView(View)
    133 setContentView()}.</p>
    134 
    135 <p>Untuk informasi tentang cara membuat antarmuka pengguna, lihat dokumentasi <a href="{@docRoot}guide/topics/ui/index.html">Antarmuka Pengguna</a>.</p>
    136 
    137 
    138 
    139 <h3 id="Declaring">Mendeklarasikan aktivitas dalam manifes</h3>
    140 
    141 <p>Anda harus mendeklarasikan aktivitas dalam file manifes agar file itu
    142 bisa diakses oleh sistem. Untuk mendeklarasikan aktivitas, bukalah file manifes Anda dan tambahkan sebuah elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
    143 sebagai anak elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
    144 . Misalnya:</p>
    145 
    146 <pre>
    147 &lt;manifest ... &gt;
    148   &lt;application ... &gt;
    149       &lt;activity android:name=".ExampleActivity" /&gt;
    150       ...
    151   &lt;/application ... &gt;
    152   ...
    153 &lt;/manifest &gt;
    154 </pre>
    155 
    156 <p>Ada beberapa atribut lain yang bisa Anda sertakan dalam elemen ini, untuk mendefinisikan properti
    157 misalnya label untuk aktivitas, ikon untuk aktivitas, atau tema untuk memberi gaya ke
    158 UI aktivitas. Atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">{@code android:name}</a>
    159  adalah satu-satunya atribut yang diperlukan&mdash;atribut ini menetapkan nama kelas aktivitas. Setelah
    160 Anda mempublikasikan aplikasi, Anda tidak boleh mengubah nama ini, karena jika melakukannya, Anda bisa merusak
    161 sebagian fungsionalitas, misalnya pintasan aplikasi (bacalah posting blog berjudul <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
    162 That Cannot Change</a>).</p>
    163 
    164 <p>Lihat acuan elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
    165 untuk informasi selengkapnya tentang cara mendeklarasikan aktivitas Anda dalam manifes.</p>
    166 
    167 
    168 <h4>Menggunakan filter intent</h4>
    169 
    170 <p>Elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
    171 &lt;activity&gt;}</a> juga bisa menetapkan berbagai filter intent&mdash;dengan menggunakan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
    172 &lt;intent-filter&gt;}</a> &mdash;untuk mendeklarasikan cara komponen aplikasi lain 
    173 mengaktifkannya.</p>
    174 
    175 <p>Bila Anda membuat aplikasi baru dengan Android SDK Tools, aktivitas stub
    176 yang dibuat untuk Anda secara otomatis menyertakan filter intent yang mendeklarasikan respons
    177 aktivitas pada tindakan "main" (utama) dan harus diletakkan dalam kategori "launcher"). Filter intent
    178 terlihat seperti ini:</p>
    179 
    180 <pre>
    181 &lt;activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"&gt;
    182     &lt;intent-filter&gt;
    183         &lt;action android:name="android.intent.action.MAIN" /&gt;
    184         &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
    185     &lt;/intent-filter&gt;
    186 &lt;/activity&gt;
    187 </pre>
    188 
    189 <p>Elemen <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
    190 &lt;action&gt;}</a> menetapkan bahwa ini adalah titik masuk "main" ke aplikasi. Elemen <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
    191 &lt;category&gt;}</a> menetapkan bahwa aktivitas ini harus tercantum dalam launcher aplikasi
    192 sistem (untuk memungkinkan pengguna meluncurkan aktivitas ini).</p>
    193 
    194 <p>Jika Anda bermaksud agar aplikasi dimuat dengan sendirinya dan tidak memperbolehkan aplikasi lain
    195 mengaktifkan aktivitasnya, maka Anda tidak memerlukan filter intent lain. Hanya satu aktivitas yang boleh
    196 memiliki tindakan "main" dan kategori "launcher", seperti dalam contoh sebelumnya. Aktivitas yang
    197 tidak ingin Anda sediakan untuk aplikasi lain tidak boleh memiliki filter intent dan Anda bisa
    198 memulai sendiri aktivitas dengan menggunakan intent secara eksplisit (seperti dibahas di bagian berikut).</p>
    199 
    200 <p>Akan tetapi, jika ingin aktivitas Anda merespons intent implisit yang dikirim dari
    201 aplikasi lain (dan aplikasi Anda sendiri), maka Anda harus mendefinisikan filter intent tambahan untuk
    202 aktivitas. Untuk masing-masing tipe intent yang ingin direspons, Anda harus menyertakan sebuah <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
    203 &lt;intent-filter&gt;}</a> yang menyertakan elemen
    204 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
    205 &lt;action&gt;}</a> dan, opsional, sebuah elemen <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
    206 &lt;category&gt;}</a> dan/atau elemen <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
    207 &lt;data&gt;}</a>. Elemen-elemen ini menetapkan tipe intent yang bisa
    208 direspons oleh aktivitas Anda.</p>
    209 
    210 <p>Untuk informasi selengkapnya tentang cara aktivitas Anda merespons intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>.
    211 </p>
    212 
    213 
    214 
    215 <h2 id="StartingAnActivity">Memulai Aktivitas</h2>
    216 
    217 <p>Anda bisa memulai aktivitas lain dengan memanggil {@link android.app.Activity#startActivity
    218   startActivity()}, dengan meneruskan sebuah {@link android.content.Intent} yang menjelaskan aktivitas
    219   yang ingin Anda mulai. Intent menetapkan aktivitas persis yang ingin Anda mulai atau menjelaskan
    220   tipe tindakan yang ingin Anda lakukan (dan sistem akan memilih aktivitas yang sesuai untuk Anda,
    221 yang bahkan
    222   bisa berasal dari aplikasi berbeda). Intent juga bisa membawa sejumlah kecil data untuk
    223   digunakan oleh aktivitas yang dimulai.</p>
    224 
    225 <p>Saat bekerja dalam aplikasi sendiri, Anda nanti akan sering meluncurkan aktivitas yang dikenal saja.
    226  Anda bisa melakukannya dengan membuat intent yang mendefinisikan secara eksplisit aktivitas yang ingin Anda mulai,
    227 dengan menggunakan nama kelas. Misalnya, beginilah cara satu aktivitas memulai aktivitas lain bernama {@code
    228 SignInActivity}:</p>
    229 
    230 <pre>
    231 Intent intent = new Intent(this, SignInActivity.class);
    232 startActivity(intent);
    233 </pre>
    234 
    235 <p>Akan tetapi, aplikasi Anda mungkin juga perlu melakukan beberapa tindakan, misalnya mengirim email,
    236   pesan teks, atau pembaruan status, dengan menggunakan data dari aktivitas Anda. Dalam hal ini, aplikasi Anda mungkin
    237  tidak memiliki aktivitasnya sendiri untuk melakukan tindakan tersebut, sehingga Anda bisa memanfaatkan aktivitas
    238   yang disediakan oleh aplikasi lain pada perangkat, yang bisa melakukan tindakan itu untuk Anda. Inilah saatnya
    239 intent benar-benar berharga&mdash;Anda bisa membuat intent yang menjelaskan tindakan yang ingin
    240 dilakukan dan sistem
    241   akan meluncurkan aktivitas yang tepat dari aplikasi lain. Jika ada
    242   beberapa aktivitas yang bisa menangani intent itu, pengguna bisa memilih aktivitas yang akan digunakan. Misalnya,
    243   jika Anda ingin memperbolehkan pengguna mengirim pesan email, Anda bisa membuat
    244   intent berikut:</p>
    245 
    246 <pre>
    247 Intent intent = new Intent(Intent.ACTION_SEND);
    248 intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
    249 startActivity(intent);
    250 </pre>
    251 
    252 <p>Ekstra {@link android.content.Intent#EXTRA_EMAIL} yang ditambahkan ke intent adalah sebuah larik string
    253   alamat email yang menjadi tujuan pengiriman email. Bila aplikasi email merespons intent ini,
    254  aplikasi itu akan membaca larik string yang disediakan dalam ekstra dan meletakkannya dalam bidang "to" 
    255   pada formulir penulisan email. Dalam situasi ini, aktivitas aplikasi email dimulai dan bila
    256   pengguna selesai, aktivitas Anda akan dilanjutkan.</p>
    257 
    258 
    259 
    260 
    261 <h3 id="StartingAnActivityForResult">Memulai aktivitas agar berhasil</h3>
    262 
    263 <p>Kadang-kadang, Anda mungkin ingin menerima hasil dari aktivitas yang Anda mulai. Dalam hal itu,
    264   mulailah aktivitas dengan memanggil {@link android.app.Activity#startActivityForResult
    265   startActivityForResult()} (sebagai ganti {@link android.app.Activity#startActivity
    266   startActivity()}). Untuk menerima hasil dari
    267 aktivitas selanjutnya nanti, implementasikan metode callback {@link android.app.Activity#onActivityResult onActivityResult()}
    268 . Bila aktivitas selanjutnya selesai, aktivitas akan mengembalikan hasil dalam {@link
    269 android.content.Intent} kepada metode {@link android.app.Activity#onActivityResult onActivityResult()}
    270 Anda.</p>
    271 
    272 <p>Misalnya, mungkin Anda ingin pengguna mengambil salah satu kontaknya, sehingga aktivitas Anda bisa
    273 melakukan sesuatu dengan informasi dalam kontak itu. Begini caranya membuat intent tersebut dan
    274 menangani hasilnya:</p>
    275 
    276 <pre>
    277 private void pickContact() {
    278     // Create an intent to "pick" a contact, as defined by the content provider URI
    279     Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    280     startActivityForResult(intent, PICK_CONTACT_REQUEST);
    281 }
    282 
    283 &#64;Override
    284 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    285     // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    286     if (resultCode == Activity.RESULT_OK &amp;&amp; requestCode == PICK_CONTACT_REQUEST) {
    287         // Perform a query to the contact's content provider for the contact's name
    288         Cursor cursor = getContentResolver().query(data.getData(),
    289         new String[] {Contacts.DISPLAY_NAME}, null, null, null);
    290         if (cursor.moveToFirst()) { // True if the cursor is not empty
    291             int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
    292             String name = cursor.getString(columnIndex);
    293             // Do something with the selected contact's name...
    294         }
    295     }
    296 }
    297 </pre>
    298 
    299 <p>Contoh ini menunjukkan logika dasar yang harus Anda gunakan dalam metode {@link
    300 android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani 
    301 hasil aktivitas. Syarat pertama memeriksa apakah permintaan berhasil&mdash;jika ya, maka
    302  {@code resultCode} akan berupa {@link android.app.Activity#RESULT_OK}&mdash;dan apakah permintaan
    303 yang direspons hasil ini dikenal&mdash;dalam hal ini, {@code requestCode} cocok dengan
    304 parameter kedua yang dikirim dengan {@link android.app.Activity#startActivityForResult
    305 startActivityForResult()}. Dari sana, kode akan menangani hasil aktivitas dengan membuat query
    306 data yang dihasilkan dalam{@link android.content.Intent} (parameter {@code data}).</p>
    307 
    308 <p>Yang terjadi adalah {@link
    309 android.content.ContentResolver} melakukan query terhadap penyedia konten, yang menghasilkan
    310 {@link android.database.Cursor} yang memperbolehkan data query dibaca. Untuk informasi selengkapnya, lihat dokumen
    311 <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
    312 
    313 <p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter
    314 Intent</a>.</p>
    315 
    316 
    317 <h2 id="ShuttingDown">Mematikan Aktivitas</h2>
    318 
    319 <p>Anda bisa mematikan aktivitas dengan memanggil metode {@link android.app.Activity#finish
    320 finish()}-nya. Anda juga bisa mematikan aktivitas terpisah yang sebelumnya Anda mulai dengan memanggil
    321 {@link android.app.Activity#finishActivity finishActivity()}.</p>
    322 
    323 <p class="note"><strong>Catatan:</strong> Pada umumnya, Anda tidak boleh secara eksplisit mengakhiri aktivitas
    324 dengan menggunakan metode-metode ini. Seperti yang dibahas di bagian berikut tentang daur hidup aktivitas,
    325 sistem Android mengelola hidup aktivitas untuk Anda, sehingga Anda tidak perlu menyelesaikan sendiri
    326 aktivitas tersebut. Memanggil metode-metode ini bisa berpengaruh negatif pada pengalaman
    327 pengguna yang diharapkan dan hanya boleh digunakan bila Anda benar-benar tidak ingin pengguna kembali ke
    328 instance aktivitas ini.</p>
    329 
    330 
    331 <h2 id="Lifecycle">Mengelola Daur Hidup Aktivitas</h2>
    332 
    333 <p>Mengelola daur hidup aktivitas dengan mengimplementasikan metode-metode callback sangat
    334 penting untuk mengembangkan
    335 aplikasi yang kuat dan fleksibel. Daur hidup aktivitas dipengaruhi langsung oleh kaitannya dengan
    336 aktivitas lain, tugasnya, serta back-stack.</p>
    337 
    338 <p>Pada dasarnya, sebuah aktivitas bisa berada dalam tiga status:</p>
    339 
    340 <dl>
    341   <dt><i>Dilanjutkan</i></dt>
    342     <dd>Aktivitas berada di latar depan layar dan mendapatkan fokus pengguna. (Status ini
    343 kadang-kadang disebut juga dengan "running" (berjalan).)</dd>
    344 
    345   <dt><i>Dihentikan sementara</i></dt>
    346     <dd>Aktivitas lain berada di latar depan dan mendapat fokus, namun aktivitas ini masih terlihat. Yakni,
    347 aktivitas lain terlihat di atas aplikasi ini dan aktivitas itu setengah transparan atau tidak
    348 menuutpi seluruh layar. Aktivitas yang dihentikan sementara adalah benar-benar hidup (objek {@link android.app.Activity}
    349 dipertahankan dalam memori, objek itu memelihara semua informasi status dan anggota, dan tetap dikaitkan dengan
    350 window manager), namun bisa dimatikan oleh sistem dalam situasi memori sangat rendah.</dd>
    351 
    352   <dt><i>Dihentikan</i></dt>
    353     <dd>Aktivitas ditutupi sepenuhnya oleh aktivitas lain (aktivitas sekarang berada di
    354 "latar belakang"). Aktivitas yang dihentikan juga masih hidup (objek {@link android.app.Activity}
    355 dipertahankan dalam memori, objek itu menjaga semua informasi status dan anggota, namun <em>tidak</em>
    356 dikaitkan dengan window manager). Akan tetapi, aktivitas tidak lagi terlihat bagi pengguna dan
    357 bisa dimatikan oleh sistem bila memori diperlukan di lain.</dd>
    358 </dl>
    359 
    360 <p>Jika aktivitas dihentikan sementara atau dihentikan, sistem bisa mengeluarkannya dari memori baik dengan memintanya agar
    361 diakhiri (memanggil metode {@link android.app.Activity#finish finish()}-nya), atau sekadar mematikan
    362 prosesnya.  Bila dibuka lagi (setelah diakhiri atau dimatikan), aktivitas harus dibuat dari
    363 awal.</p>
    364 
    365 
    366 
    367 <h3 id="ImplementingLifecycleCallbacks">Mengimplementasikan callback daur hidup</h3>
    368 
    369 <p>Saat bertransisi ke dalam dan ke luar berbagai status yang dijelaskan di atas, aktivitas diberi tahu
    370 melalui berbagai metode callback. Semua metode callback adalah sangkutan yang
    371 bisa Anda kesampingkan untuk melakukan pekerjaan yang sesuai saat status aktivitas Anda berubah. Aktivitas skeleton
    372 berikut menyertakan setiap metode daur hidup mendasar:</p>
    373 
    374 
    375 <pre>
    376 public class ExampleActivity extends Activity {
    377     &#64;Override
    378     public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) {
    379         super.onCreate(savedInstanceState);
    380         // The activity is being created.
    381     }
    382     &#64;Override
    383     protected void {@link android.app.Activity#onStart onStart()} {
    384         super.onStart();
    385         // The activity is about to become visible.
    386     }
    387     &#64;Override
    388     protected void {@link android.app.Activity#onResume onResume()} {
    389         super.onResume();
    390         // The activity has become visible (it is now "resumed").
    391     }
    392     &#64;Override
    393     protected void {@link android.app.Activity#onPause onPause()} {
    394         super.onPause();
    395         // Another activity is taking focus (this activity is about to be "paused").
    396     }
    397     &#64;Override
    398     protected void {@link android.app.Activity#onStop onStop()} {
    399         super.onStop();
    400         // The activity is no longer visible (it is now "stopped")
    401     }
    402     &#64;Override
    403     protected void {@link android.app.Activity#onDestroy onDestroy()} {
    404         super.onDestroy();
    405         // The activity is about to be destroyed.
    406     }
    407 }
    408 </pre>
    409 
    410 <p class="note"><strong>Catatan:</strong> Implementasi Anda terhadap metode-metode daur hidup ini harus
    411 selalu memanggil implementasi superkelas sebelum melakukan pekerjaan apa pun, seperti yang ditampilkan dalam contoh-contoh di atas.</p>
    412 
    413 <p>Bersama-sama, semua metode ini mendefinisikan seluruh daur hidup sebuah aktivitas. Dengan mengimplementasikan
    414 metode-metode ini, Anda bisa memantau tiga loop tersarang (nested loop) dalam daur hidup aktivitas: </p>
    415 
    416 <ul>
    417 <li><b>Seluruh masa hidup</b> aktivitas berlangsung antara panggilan ke {@link
    418 android.app.Activity#onCreate onCreate()} dan panggilan ke {@link
    419 android.app.Activity#onDestroy}. Aktivitas Anda harus melakukan penyiapan
    420 status "global" (misalnya mendefinisikan layout) dalam {@link android.app.Activity#onCreate onCreate()}, dan
    421 melepas semua sisa sumber daya dalam {@link android.app.Activity#onDestroy}. Misalnya, jika
    422 aktivitas Anda memiliki sebuah thread yang berjalan di latar belakang untuk mengunduh data dari jaringan, aktivitas itu bisa membuat
    423 thread itu dalam {@link android.app.Activity#onCreate onCreate()} kemudian menghentikan thread dalam {@link
    424 android.app.Activity#onDestroy}.</li>
    425 
    426 <li><p><b>Masa pakai terlihat</b> (visible lifetime) aktivitas berlangsung antara panggilan ke {@link
    427 android.app.Activity#onStart onStart()} dan panggilan ke {@link
    428 android.app.Activity#onStop onStop()}. Selama ini, pengguna bisa melihat aktivitas
    429 pada layar dan berinteraksi dengannya. Misalnya, {@link android.app.Activity#onStop onStop()} dipanggil
    430 bila sebuah aktivitas baru dimulai dan aktivitas ini tidak lagi terlihat. Di antara dua metode ini, Anda bisa
    431 memelihara sumber daya yang diperlukan untuk menampilkan aktivitas kepada pengguna. Misalnya, Anda bisa mendaftarkan sebuah
    432 {@link android.content.BroadcastReceiver} dalam {@link
    433 android.app.Activity#onStart onStart()} untuk memantau perubahan yang berdampak pada UI Anda, dan mencabut pendaftarannya
    434 dalam {@link android.app.Activity#onStop onStop()} bila pengguna tidak bisa lagi melihat apa yang sedang Anda
    435 tampilkan. Sistem bisa memanggil {@link android.app.Activity#onStart onStart()} dan {@link
    436 android.app.Activity#onStop onStop()} beberapa kali selama masa pakai aktivitas, sambil
    437 aktivitas berganti-ganti antara terlihat dan tersembunyi bagi pengguna.</p></li>
    438 
    439 <li><p><b>Masa pakai latar depan</b> aktivitas berlangsung antara panggilan ke {@link
    440 android.app.Activity#onResume onResume()} dan panggilan ke {@link android.app.Activity#onPause
    441 onPause()}. Selama waktu ini, aktivitas berada di depan semua aktivitas lain pada layar dan mendapatkan
    442 fokus input pengguna.  Aktivitas bisa sering bertransisi ke dalam dan ke luar latar depan&mdash;misalnya,
    443  {@link android.app.Activity#onPause onPause()} dipanggil bila perangkat masuk ke mode tidur atau
    444 bila dialog muncul. Karena status ini bisa sering bertransisi, kode dalam dua metode ini harus
    445 cukup ringan untuk menghindari transisi lamban yang membuat pengguna menunggu.</p></li>
    446 </ul>
    447 
    448 <p>Gambar 1 mengilustrasikan loop dan path yang mungkin diambil sebuah aktivitas di antara status-status.
    449 Persegi panjang mewakili metode callback yang bisa Anda implementasikan untuk melakukan operasi saat
    450 aktivitas bertransisi di antara status. <p>
    451 
    452 <img src="{@docRoot}images/activity_lifecycle.png" alt="" />
    453 <p class="img-caption"><strong>Gambar 1.</strong> Daur hidup aktivitas.</p>
    454 
    455 <p>Metode-metode callback daur hidup yang sama tercantum dalam tabel 1, yang menjelaskan setiap metode callback
    456 secara lebih detail dan menentukan lokasinya masing-masing dalam
    457 daur hidup aktivitas keseluruhan, termasuk apakah sistem bisa mematikan aktivitas setelah
    458 metode callback selesai.</p>
    459 
    460 <p class="table-caption"><strong>Tabel 1.</strong> Rangkuman metode callback
    461 daur hidup aktivitas.</p>
    462 
    463 <table border="2" width="85%" frame="hsides" rules="rows">
    464 <colgroup align="left" span="3"></colgroup>
    465 <colgroup align="left"></colgroup>
    466 <colgroup align="center"></colgroup>
    467 <colgroup align="center"></colgroup>
    468 
    469 <thead>
    470 <tr><th colspan="3">Metode</th> <th>Keterangan</th> <th>Bisa dimatikan setelahnya?</th> <th>Berikutnya</th></tr>
    471 </thead>
    472 
    473 <tbody>
    474 <tr>
    475   <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
    476   <td>Dipanggil saat aktivitas pertama kali dibuat.
    477       Di sinilah Anda harus melakukan semua persiapan statis normal &mdash;
    478       membuat tampilan, mengikat data ke daftar, dan sebagainya.  Metode ini diberi
    479       sebuah objek Bundle yang berisi status aktivitas sebelumnya, jika
    480       status itu tertangkap (lihat <a href="#actstate">Menyimpan Status Aktivitas</a>,
    481       nanti).
    482       <p>Selalu diikuti oleh {@code onStart()}.</p></td>
    483   <td align="center">Tidak</td>
    484       <td align="center">{@code onStart()}</td>
    485 </tr>
    486 
    487 <tr>
    488    <td rowspan="5" style="border-left: none; border-right: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
    489    <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart
    490 onRestart()}</code></td>
    491    <td>Dipanggil setelah aktivitas dihentikan, tepat sebelum
    492        dimulai lagi.
    493        <p>Selalu diikuti oleh {@code onStart()}</p></td>
    494    <td align="center">Tidak</td>
    495    <td align="center">{@code onStart()}</td>
    496 </tr>
    497 
    498 <tr>
    499    <td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
    500    <td>Dipanggil tepat sebelum aktivitas menjadi terlihat bagi pengguna.
    501        <p>Diikuti oleh {@code onResume()} jika aktivitas maju
    502        ke latar depan, atau {@code onStop()} jika menjadi tersembunyi.</p></td>
    503     <td align="center">Tidak</td>
    504     <td align="center">{@code onResume()} <br/>atau<br/> {@code onStop()}</td>
    505 </tr>
    506 
    507 <tr>
    508    <td rowspan="2" style="border-left: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
    509    <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
    510    <td>Dipanggil tepat sebelum aktivitas mulai
    511        berinteraksi dengan pengguna.  Pada titik ini, aktivitas berada di
    512        puncak tumpukan aktivitas, dengan input pengguna menuju kepadanya.
    513        <p>Selalu diikuti oleh {@code onPause()}.</p></td>
    514    <td align="center">Tidak</td>
    515    <td align="center">{@code onPause()}</td>
    516 </tr>
    517 
    518 <tr>
    519    <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
    520    <td>Dipanggil bila sistem akan memulai pelanjutan
    521        aktivitas lain.  Metode ini biasanya digunakan untuk menerapkan (commit) perubahan yang tidak tersimpan pada
    522        data persisten, menghentikan animasi dan hal-hal lain yang mungkin menghabiskan
    523        CPU, dan sebagainya.  Metode ini harus melakukan apa saja yang dilakukannya dengan sangat cepat, karena
    524        aktivitas berikutnya tidak akan dilanjutkan hingga aktivitas ini kembali.
    525        <p>Diikuti oleh {@code onResume()} jika aktivitas
    526        kembali ke depan, atau oleh {@code onStop()} jika menjadi
    527        tidak terlihat bagi pengguna.</td>
    528    <td align="center"><strong style="color:#800000">Ya</strong></td>
    529    <td align="center">{@code onResume()} <br/>atau<br/> {@code onStop()}</td>
    530 </tr>
    531 
    532 <tr>
    533    <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
    534    <td>Dipanggil bila aktivitas tidak lagi terlihat bagi pengguna.  Hal ini
    535        bisa terjadi karena aktivitas sedang dimusnahkan, atau karena aktivitas lain
    536        (aktivitas yang ada atau yang baru) telah dilanjutkan dan sedang menutupinya.
    537        <p>Diikuti oleh {@code onRestart()} jika
    538        aktivitas kembali untuk berinteraksi dengan pengguna, atau oleh
    539        {@code onDestroy()} jika aktivitas ini akan menghilang.</p></td>
    540    <td align="center"><strong style="color:#800000">Ya</strong></td>
    541    <td align="center">{@code onRestart()} <br/>atau<br/> {@code onDestroy()}</td>
    542 </tr>
    543 
    544 <tr>
    545    <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy
    546 onDestroy()}</code></td>
    547    <td>Dipanggil sebelum aktivitas dimusnahkan.  Inilah panggilan terakhir
    548        yang akan diterima aktivitas.  Metode ini bisa dipanggil karena
    549        aktivitas selesai (seseorang memanggil <code>{@link android.app.Activity#finish
    550        finish()}</code> padanya), atau karena sistem memusnahkan sementara
    551        instance aktivitas ini untuk menghemat tempat.  Anda bisa membedakan
    552        kedua skenario ini dengan metode <code>{@link
    553        android.app.Activity#isFinishing isFinishing()}</code>.</td>
    554    <td align="center"><strong style="color:#800000">Ya</strong></td>
    555    <td align="center"><em>tidak ada</em></td>
    556 </tr>
    557 </tbody>
    558 </table>
    559 
    560 <p>Kolom berlabel "Bisa dimatikan setelahnya?" menunjukkan apakah sistem bisa
    561 atau tidak mematikan proses yang menjadi host aktivitas kapan saja <em>setelah metode kembali</em>, tanpa
    562 menjalankan baris lain pada kode aktivitas.  Tiga metode ini ditandai "ya": ({@link
    563 android.app.Activity#onPause
    564 onPause()}, {@link android.app.Activity#onStop onStop()}, dan {@link android.app.Activity#onDestroy
    565 onDestroy()}). Karena {@link android.app.Activity#onPause onPause()} adalah yang pertama
    566 dari tiga, begitu aktivitas dibuat, {@link android.app.Activity#onPause onPause()} adalah
    567 metode terakhir yang dipastikan akan dipanggil sebelum proses <em>bisa</em> dimatikan&mdash;jika
    568 sistem harus memulihkan memori dalam keadaan darurat, maka {@link
    569 android.app.Activity#onStop onStop()} dan {@link android.app.Activity#onDestroy onDestroy()} mungkin
    570 tidak dipanggil. Karena itu, Anda harus menggunakan {@link android.app.Activity#onPause onPause()} untuk menulis
    571 data persisten yang penting (misalnya hasil edit pengguna) ke penyimpanan. Akan tetapi, Anda harus selektif dalam hal
    572 informasi yang harus dipertahankan selama {@link android.app.Activity#onPause onPause()}, karena setiap
    573 prosedur pemblokiran dalam metode ini akan memblokir transisi ke aktivitas berikutnya dan memperlambat
    574 pengalaman pengguna.</p>
    575 
    576 <p> Metode-metode yang ditandai "Tidak" dalam kolom <b>Bisa dimatikan</b> melindungi proses yang menjadi host
    577 aktivitas dari dimatikan sejak saat metode dipanggil.  Jadi, aktivitas bisa dimatikan
    578 sejak {@link android.app.Activity#onPause onPause()} kembali hingga waktu
    579 {@link android.app.Activity#onResume onResume()} dipanggil. Aktivitas tidak akan lagi bisa dimatikan hingga
    580 {@link android.app.Activity#onPause onPause()} dipanggil lagi dan kembali. </p>
    581 
    582 <p class="note"><strong>Catatan:</strong> Aktivitas yang tidak "bisa dimatikan" secara teknis oleh
    583 definisi dalam tabel 1 masih bisa dimatikan oleh sistem&mdash;namun itu hany terjadi dalam
    584 situasi ekstrem bila tidak ada jalan lain. Kapan aktivitas bisa dimatikan
    585 akan dibahas selengkapnya dalam dokumen <a href="{@docRoot}guide/components/processes-and-threads.html">Proses dan
    586 Threading</a>.</p>
    587 
    588 
    589 <h3 id="SavingActivityState">Menyimpan status aktivitas</h3>
    590 
    591 <p>Pengantar untuk <a href="#Lifecycle">Mengelola Daur Hidup Aktivitas</a> secara ringkas menyebutkan
    592 bahwa
    593 bila aktivitas dihentikan sementara atau dihentikan, status aktivitas akan dipertahankan. Hal itu terjadi karena
    594 objek {@link android.app.Activity} masih ditahan dalam memori saat aktivitas dihentikan sementara atau
    595 dihentikan&mdash;semua informasi tentang anggota dan statusnya saat ini masih hidup. Jadi, setiap perubahan
    596 yang dibuat pengguna dalam aktivitas akan dipertahankan sehingga bila aktivitas kembali ke
    597 latar depan (bila "dilanjutkan"), perubahan itu masih ada.</p>
    598 
    599 <p>Akan tetapi, bila sistem memusnahkan aktivitas untuk memulihkan memori, objek {@link
    600 android.app.Activity} akan dimusnahkan, sehingga sistem tidak bisa sekadar melanjutkan aktivitas dengan status
    601 tidak berubah. Sebagai gantinya, sistem harus membuat ulang objek {@link android.app.Activity} jika pengguna
    602 menyusuri kembali ke aktivitas tersebut. Namun, pengguna tidak menyadari
    603 bahwa sistem memusnahkan aktivitas dan membuatnya kembali dan, karena itu, mungkin
    604 mengharapkan aktivitas untuk sama persis dengan sebelumnya. Dalam situasi ini, Anda bisa memastikan bahwa
    605 informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan 
    606 metode callback tambahan yang memungkinkan Anda menyimpan informasi tentang status aktivitas: {@link
    607 android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
    608 
    609 <p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
    610 sebelum membuat aktivitas rawan terhadap pemusnahan. Sistem meneruskan ke metode ini
    611 sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan 
    612 informasi status tentang aktivitas sebagai pasangan nama-nilai, dengan menggunakan metode-metode misalnya {@link
    613 android.os.Bundle#putString putString()} dan {@link
    614 android.os.Bundle#putInt putInt()}. Kemudian, jika sistem mematikan proses aplikasi Anda
    615 dan pengguna menyusuri kembali ke aktivitas tersebut, sistem akan membuat kembali aktivitas dan meneruskan
    616 {@link android.os.Bundle} ke {@link android.app.Activity#onCreate onCreate()} maupun {@link
    617 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu 
    618 metode ini, Anda bisa mengekstrak status tersimpan dari {@link android.os.Bundle} dan memulihkan
    619 status aktivitas. Jika tidak ada informasi status untuk dipulihkan, maka {@link
    620 android.os.Bundle} yang diteruskan kepada adalah Anda null (yang akan terjadi bila aktivitas dibuat untuk
    621 pertama kali).</p>
    622 
    623 <img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
    624 <p class="img-caption"><strong>Gambar 2.</strong> Ada dua cara yang bisa digunakan aktivitas untuk kembali ke fokus pengguna
    625 dengan status tetap: aktivitas dimusnahkan, kemudian dibuat kembali, dan aktivitas harus memulihkan
    626 status yang disimpan sebelumnya, atau aktivitas dihentikan, kemudian dilanjutkan dengan status aktivitas
    627 tetap.</p>
    628 
    629 <p class="note"><strong>Catatan:</strong> Tidak ada jaminan bahwa {@link
    630 android.app.Activity#onSaveInstanceState onSaveInstanceState()} akan dipanggil sebelum
    631 aktivitas Anda dimusnahkan, karena bisa saja terjadi aktivitas tidak perlu menyimpan status
    632 (misalnya saat pengguna meninggalkan aktivitas Anda dengan menggunakan tombol <em>Back</em>, karena pengguna menutup aktivitas
    633 secara eksplisit
    634 ). Jika sistem memanggil {@link android.app.Activity#onSaveInstanceState
    635 onSaveInstanceState()}, ini akan dilakukan sebelum {@link
    636 android.app.Activity#onStop onStop()} dan mungkin sebelum {@link android.app.Activity#onPause
    637 onPause()}.</p>
    638 
    639 <p>Akan tetapi, sekalipun Anda tidak melakukan apa-apa dan tidak mengimplementasikan {@link
    640 android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas
    641 akan dipulihkan oleh implementasi default {@link
    642 android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya, 
    643 implementasi default akan memanggil metode {@link
    644 android.view.View#onSaveInstanceState onSaveInstanceState()} yang sesuai untuk setiap {@link
    645 android.view.View} dalam layout, yang memungkinkan setiap tampilan untuk memberi informasi tentang dirinya
    646 yang harus disimpan. Hampir setiap widget dalam kerangka kerja Android mengimplementasikan metode ini
    647 sebagaimana mestinya, sehingga setiap perubahan yang terlihat pada UI akan disimpan dan dipulihkan secara otomatis bila
    648 aktivitas Anda dibuat kembali. Misalnya, widget {@link android.widget.EditText} menyimpan teks apa saja
    649 yang dimasukkan oleh pengguna dan widget {@link android.widget.CheckBox} menyimpan baik teks itu diperiksa maupun
    650 tidak. Satu-satunya pekerjaan yang Anda perlukan adalah memberikan ID unik (dengan atribut <a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>
    651 ) untuk masing-masing widget yang ingin disimpan statusnya. Jika widget tidak memiliki ID, maka sistem
    652 tidak bisa menyimpan statusnya.</p>
    653 
    654 <div class="sidebox-wrapper">
    655 <div class="sidebox">
    656 <p>Anda juga bisa menghentikan secara eksplisit sebuah tampilan dalam layout Anda agar tidak menyimpan statusnya dengan mengatur atribut
    657 {@link android.R.attr#saveEnabled android:saveEnabled} ke {@code "false"} atau dengan memanggil
    658 metode {@link android.view.View#setSaveEnabled setSaveEnabled()}. Biasanya, Anda tidak boleh
    659 menonaktifkannya, namun Anda boleh melakukannya jika ingin memulihkan status UI aktivitas secara berbeda.</p>
    660 </div>
    661 </div>
    662 
    663 <p>Walaupun implementasi default {@link
    664 android.app.Activity#onSaveInstanceState onSaveInstanceState()} menyimpan informasi yang berguna tentang
    665 UI aktivitas, Anda mungkin masih perlu mengesampingkannya untuk menyimpan informasi tambahan.
    666 Misalnya, Anda mungkin perlu menyimpan nilai-nilai anggota yang berubah selama masa pakai aktivitas (yang
    667 mungkin berkorelasi dengan nilai-nilai yang dipulihkan dalam UI, namun anggota-anggota yang menyimpan nilai-nilai UI itu tidak
    668 dipulihkan, secara default).</p>
    669 
    670 <p>Karena implementasi default {@link
    671 android.app.Activity#onSaveInstanceState onSaveInstanceState()} membantu menyimpan status UI, jika
    672 Anda mengesampingkan metode ini untuk menyimpan informasi tambahan status, Anda harus selalu memanggil
    673 implementasi superkelas {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
    674 sebelum melakukan pekerjaan apa pun. Demikian pula, Anda juga harus memanggil implementasi superkelas {@link
    675 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} jika Anda mengesampingkannya, sehingga
    676 implementasi default bisa memulihkan status tampilan.</p>
    677 
    678 <p class="note"><strong>Catatan:</strong> Karena {@link android.app.Activity#onSaveInstanceState
    679 onSaveInstanceState()} tidak dijamin
    680 akan dipanggil, Anda harus menggunakannya hanya untuk mencatat status aktivitas sementara (transient) (status
    681 UI)&mdash;Anda tidak boleh menggunakannya untuk menyimpan data persisten.  Sebagai gantinya, Anda harus menggunakan {@link
    682 android.app.Activity#onPause onPause()} untuk menyimpan data persisten (misalnya data yang harus disimpan
    683 ke database) saat pengguna meninggalkan aktivitas.</p>
    684 
    685 <p>Salah satu cara yang baik untuk menguji kemampuan aplikasi dalam memulihkan statusnya adalah cukup dengan memutar
    686 perangkat sehingga orientasi layarnya berubah. Bila orientasi layar berubah, sistem
    687 akan memusnahkan dan membuat kembali aktivitas untuk menerapkan sumber daya alternatif yang mungkin tersedia
    688 untuk konfigurasi layar baru. Karena alasan ini saja, sangat penting bahwa aktivitas Anda
    689 memulihkan statusnya secara lengkap saat dibuat kembali, karena pengguna memutar layar secara rutin saat
    690 menggunakan aplikasi.</p>
    691 
    692 
    693 <h3 id="ConfigurationChanges">Menangani perubahan konfigurasi</h3>
    694 
    695 <p>Sebagian konfigurasi perangkat bisa berubah saat runtime (misalnya orientasi layar, ketersediaan keyboard
    696 , dan bahasa). Bila terjadi perubahan demikian, Android akan membuat kembali aktivitas yang berjalan
    697 (sistem akan memanggil {@link android.app.Activity#onDestroy}, kemudian segera memanggil {@link
    698 android.app.Activity#onCreate onCreate()}). Perilaku ini
    699 didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang 
    700 aplikasi Anda secara otomatis dengan sumber daya alternatif yang telah Anda sediakan (misalnya layout yang berbeda untuk
    701 layar orientasi dan ukuran yang berbeda).</p>
    702 
    703 <p>Jika Anda mendesain aktivitas dengan benar untuk menangani restart karena perubahan orientasi layar dan
    704 memulihkan status aktivitas seperti yang dijelaskan di atas, aplikasi Anda akan lebih tahan terhadap
    705 kejadian tidak terduga lainnya dalam daur hidup aktivitas.</p>
    706 
    707 <p>Cara terbaik menangani restart tersebut adalah
    708   menyimpan dan memulihkan status aktivitas Anda dengan menggunakan {@link
    709   android.app.Activity#onSaveInstanceState onSaveInstanceState()} dan {@link
    710 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (atau {@link
    711 android.app.Activity#onCreate onCreate()}), seperti yang dibahas di bagian sebelumnya.</p>
    712 
    713 <p>Untuk informasi selengkapnya tentang konfigurasi perubahan yang terjadi saat program berjalan dan cara menanganinya
    714 , bacalah panduan untuk <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani
    715 Perubahan Runtime</a>.</p>
    716 
    717 
    718 
    719 <h3 id="CoordinatingActivities">Mengoordinasikan aktivitas</h3>
    720 
    721  <p>Bila suatu aktivitas memulai aktivitas lain, keduanya akan mengalami transisi daur hidup. Aktivitas pertama
    722 akan berhenti sementara dan berhenti sama sekali (walau tidak akan berhenti jika masih terlihat di latar belakang), saat
    723 aktivitas lain dibuat. Jika aktivitas-aktivitas ini berbagi data yang disimpan ke disk atau di tempat lain, Anda perlu
    724 memahami bahwa aktivitas pertama tidak dihentikan sepenuhnya sebelum aktivitas kedua dibuat.
    725 Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian 
    726 aktivitas pertama.</p>
    727 
    728 <p>Urutan callback daur hidup didefinisikan dengan baik, khususnya bila kedua aktivitas berada dalam
    729 proses yang sama dan salah satunya memulai yang lain. Berikut ini adalah urutan operasi yang terjadi bila Aktivitas
    730 A memulai Aktivitas B: </p>
    731 
    732 <ol>
    733 <li>Metode {@link android.app.Activity#onPause onPause()} Aktivitas A berjalan.</li>
    734 
    735 <li>Metode-metode {@link android.app.Activity#onCreate onCreate()}, {@link
    736 android.app.Activity#onStart onStart()}, dan {@link android.app.Activity#onResume onResume()}
    737 Aktivitas B berjalan secara berurutan. (Aktivitas B sekarang mendapatkan fokus pengguna.)</li>
    738 
    739 <li>Kemudian, jika Aktivitas A tidak lagi terlihat di layar, metode {@link
    740 android.app.Activity#onStop onStop()}-nya akan dijalankan.</li>
    741 </ol>
    742 
    743  <p>Urutan callback daur hidup yang bisa diramalkan ini memungkinkan Anda mengelola transisi
    744 informasi dari satu aktivitas ke aktivitas lainnya. Misalnya, jika Anda harus menulis ke database saat
    745 aktivitas pertama berhenti agar aktivitas berikutnya bisa membacanya, maka Anda harus menulis ke
    746 database selama {@link android.app.Activity#onPause onPause()} sebagai ganti selama {@link
    747 android.app.Activity#onStop onStop()}.</p>
    748 
    749 <!--
    750 <h2>Beginner's Path</h2>
    751 
    752 <p>For more information about how Android maintains a history of activities and
    753 enables user multitasking, continue with the <b><a
    754 href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
    755 Stack</a></b> document.</p>
    756 -->
    757