• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Aktivitas
2page.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
39Back-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
48pengguna untuk berinteraksi guna melakukan sesuatu, misalnya memilih nomor telepon, mengambil foto, mengirim email, atau
49menampilkan peta. Tiap aktivitas diberi sebuah jendela untuk menggambar antarmuka penggunanya. Jendela ini
50biasanya mengisi layar, namun mungkin lebih kecil daripada layar dan mengambang di atas
51jendela lain.</p>
52
53<p> Sebuah aplikasi biasanya terdiri atas beberapa aktivitas yang terikat secara longgar
54satu sama lain. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas "utama", yang
55ditampilkan kepada pengguna saat membuka aplikasi untuk pertama kali. Tiap
56aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali
57aktivitas baru dimulai, aktivitas sebelumnya akan dihentikan, namun sistem mempertahankan aktivitas
58dalam sebuah tumpukan ("back-stack"). Bila sebuah aktivitas baru dimulai, aktivitas itu akan didorong ke atas back-stack dan
59mengambil fokus pengguna. Back-stack mematuhi mekanisme dasar tumpukan "masuk terakhir, keluar pertama",
60jadi, bila pengguna selesai dengan aktivitas saat ini dan menekan tombol <em>Back</em>, aktivitas
61akan dikeluarkan dari tumpukan (dan dimusnahkan) dan aktivitas sebelumnya akan dilanjutkan. (Back-stack
62dibahas selengkapnya dalam dokumen <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas
63dan 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
66melalui metode callback daur hidupnya.
67Ada beberapa metode callback yang mungkin diterima aktivitas, karena sebuah perubahan dalam
68statusnya&mdash;apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya&mdash;dan
69masing-masing callback memberi Anda kesempatan melakukan pekerjaan tertentu yang
70sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas
71objek besar, seperti koneksi jaringan atau database. Bila aktivitas dilanjutkan, Anda bisa
72memperoleh kembali sumber daya yang diperlukan dan melanjutkan tindakan yang terputus. Transisi status ini
73semuanya bagian dari daur hidup aktivitas.</p>
74
75<p>Bagian selebihnya dari dokumen ini membahas dasar-dasar cara membuat dan menggunakan aktivitas,
76yang meliputi satu pembahasan lengkap tentang cara kerja daur hidup aktivitas, sehingga Anda bisa dengan benar mengelola
77transisi 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
84subkelasnya yang ada). Dalam subkelas itu, Anda perlu mengimplementasikan metode-metode callback yang
85dipanggil sistem saat aktivitas bertransisi di antara berbagai status daur hidupnya, misalnya saat
86aktivitas sedang dibuat, dihentikan, dilanjutkan, atau dimusnahkan. Dua metode callback
87terpenting 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
93aktivitas.
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
98aktivitas Anda (walau itu tidak selalu berarti aktivitas sedang dimusnahkan). Inilah biasanya tempat Anda
99harus mengikat setiap perubahan yang harus dipertahankan selepas sesi pengguna saat ini (karena
100pengguna mungkin tidak kembali).</dd>
101</dl>
102
103<p>Ada beberapa metode callback daur hidup lainnya yang harus Anda gunakan untuk memberikan
104pengalaman pengguna yang mengalir di antara aktivitas dan menangani interupsi tidak terduga yang menyebabkan aktivitas Anda
105dihentikan dan bahkan dimusnahkan. Semua metode callback daur hidup akan dibahas nanti, di
106bagian 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
113dari kelas {@link android.view.View}.  Tiap tampilan mengontrol sebuah ruang persegi panjang tertentu
114dalam jendela aktivitas dan bisa merespons interaksi pengguna. Misalnya, sebuah tampilan mungkin berupa sebuah
115tombol 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
118layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar,
119misalnya tombol, bidang teks, kotak cek, atau sekadar sebuah gambar. "Layout" adalah tampilan yang diturunkan dari {@link
120android.view.ViewGroup} yang memberikan sebuah model layout unik untuk tampilan anaknya, misalnya
121layout 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
123layout 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
126sumber daya aplikasi Anda. Dengan cara ini, Anda bisa memelihara desain antarmuka pengguna Anda secara terpisah dari
127kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI
128aktivitas Anda dengan {@link android.app.Activity#setContentView(int) setContentView()}, dengan meneruskan
129ID sumber daya untuk layout itu. Akan tetapi, Anda juga bisa membuat {@link android.view.View} baru dalam
130kode aktivitas dan membuat hierarki tampilan dengan menyisipkan {@link
131android.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)
133setContentView()}.</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
142bisa 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>
143sebagai 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
157misalnya label untuk aktivitas, ikon untuk aktivitas, atau tema untuk memberi gaya ke
158UI 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
160Anda mempublikasikan aplikasi, Anda tidak boleh mengubah nama ini, karena jika melakukannya, Anda bisa merusak
161sebagian fungsionalitas, misalnya pintasan aplikasi (bacalah posting blog berjudul <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
162That Cannot Change</a>).</p>
163
164<p>Lihat acuan elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
165untuk 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
173mengaktifkannya.</p>
174
175<p>Bila Anda membuat aplikasi baru dengan Android SDK Tools, aktivitas stub
176yang dibuat untuk Anda secara otomatis menyertakan filter intent yang mendeklarasikan respons
177aktivitas pada tindakan "main" (utama) dan harus diletakkan dalam kategori "launcher"). Filter intent
178terlihat 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
192sistem (untuk memungkinkan pengguna meluncurkan aktivitas ini).</p>
193
194<p>Jika Anda bermaksud agar aplikasi dimuat dengan sendirinya dan tidak memperbolehkan aplikasi lain
195mengaktifkan aktivitasnya, maka Anda tidak memerlukan filter intent lain. Hanya satu aktivitas yang boleh
196memiliki tindakan "main" dan kategori "launcher", seperti dalam contoh sebelumnya. Aktivitas yang
197tidak ingin Anda sediakan untuk aplikasi lain tidak boleh memiliki filter intent dan Anda bisa
198memulai 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
201aplikasi lain (dan aplikasi Anda sendiri), maka Anda harus mendefinisikan filter intent tambahan untuk
202aktivitas. 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
208direspons 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,
221yang 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,
227dengan menggunakan nama kelas. Misalnya, beginilah cara satu aktivitas memulai aktivitas lain bernama {@code
228SignInActivity}:</p>
229
230<pre>
231Intent intent = new Intent(this, SignInActivity.class);
232startActivity(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
239intent benar-benar berharga&mdash;Anda bisa membuat intent yang menjelaskan tindakan yang ingin
240dilakukan 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>
247Intent intent = new Intent(Intent.ACTION_SEND);
248intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
249startActivity(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
267aktivitas selanjutnya nanti, implementasikan metode callback {@link android.app.Activity#onActivityResult onActivityResult()}
268. Bila aktivitas selanjutnya selesai, aktivitas akan mengembalikan hasil dalam {@link
269android.content.Intent} kepada metode {@link android.app.Activity#onActivityResult onActivityResult()}
270Anda.</p>
271
272<p>Misalnya, mungkin Anda ingin pengguna mengambil salah satu kontaknya, sehingga aktivitas Anda bisa
273melakukan sesuatu dengan informasi dalam kontak itu. Begini caranya membuat intent tersebut dan
274menangani hasilnya:</p>
275
276<pre>
277private 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
284protected 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
300android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani
301hasil 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
303yang direspons hasil ini dikenal&mdash;dalam hal ini, {@code requestCode} cocok dengan
304parameter kedua yang dikirim dengan {@link android.app.Activity#startActivityForResult
305startActivityForResult()}. Dari sana, kode akan menangani hasil aktivitas dengan membuat query
306data yang dihasilkan dalam{@link android.content.Intent} (parameter {@code data}).</p>
307
308<p>Yang terjadi adalah {@link
309android.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
314Intent</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
320finish()}-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
324dengan menggunakan metode-metode ini. Seperti yang dibahas di bagian berikut tentang daur hidup aktivitas,
325sistem Android mengelola hidup aktivitas untuk Anda, sehingga Anda tidak perlu menyelesaikan sendiri
326aktivitas tersebut. Memanggil metode-metode ini bisa berpengaruh negatif pada pengalaman
327pengguna yang diharapkan dan hanya boleh digunakan bila Anda benar-benar tidak ingin pengguna kembali ke
328instance 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
334penting untuk mengembangkan
335aplikasi yang kuat dan fleksibel. Daur hidup aktivitas dipengaruhi langsung oleh kaitannya dengan
336aktivitas 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
343kadang-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,
347aktivitas lain terlihat di atas aplikasi ini dan aktivitas itu setengah transparan atau tidak
348menuutpi seluruh layar. Aktivitas yang dihentikan sementara adalah benar-benar hidup (objek {@link android.app.Activity}
349dipertahankan dalam memori, objek itu memelihara semua informasi status dan anggota, dan tetap dikaitkan dengan
350window 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}
355dipertahankan dalam memori, objek itu menjaga semua informasi status dan anggota, namun <em>tidak</em>
356dikaitkan dengan window manager). Akan tetapi, aktivitas tidak lagi terlihat bagi pengguna dan
357bisa 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
361diakhiri (memanggil metode {@link android.app.Activity#finish finish()}-nya), atau sekadar mematikan
362prosesnya.  Bila dibuka lagi (setelah diakhiri atau dimatikan), aktivitas harus dibuat dari
363awal.</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
370melalui berbagai metode callback. Semua metode callback adalah sangkutan yang
371bisa Anda kesampingkan untuk melakukan pekerjaan yang sesuai saat status aktivitas Anda berubah. Aktivitas skeleton
372berikut menyertakan setiap metode daur hidup mendasar:</p>
373
374
375<pre>
376public 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
411selalu 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
414metode-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
418android.app.Activity#onCreate onCreate()} dan panggilan ke {@link
419android.app.Activity#onDestroy}. Aktivitas Anda harus melakukan penyiapan
420status "global" (misalnya mendefinisikan layout) dalam {@link android.app.Activity#onCreate onCreate()}, dan
421melepas semua sisa sumber daya dalam {@link android.app.Activity#onDestroy}. Misalnya, jika
422aktivitas Anda memiliki sebuah thread yang berjalan di latar belakang untuk mengunduh data dari jaringan, aktivitas itu bisa membuat
423thread itu dalam {@link android.app.Activity#onCreate onCreate()} kemudian menghentikan thread dalam {@link
424android.app.Activity#onDestroy}.</li>
425
426<li><p><b>Masa pakai terlihat</b> (visible lifetime) aktivitas berlangsung antara panggilan ke {@link
427android.app.Activity#onStart onStart()} dan panggilan ke {@link
428android.app.Activity#onStop onStop()}. Selama ini, pengguna bisa melihat aktivitas
429pada layar dan berinteraksi dengannya. Misalnya, {@link android.app.Activity#onStop onStop()} dipanggil
430bila sebuah aktivitas baru dimulai dan aktivitas ini tidak lagi terlihat. Di antara dua metode ini, Anda bisa
431memelihara sumber daya yang diperlukan untuk menampilkan aktivitas kepada pengguna. Misalnya, Anda bisa mendaftarkan sebuah
432{@link android.content.BroadcastReceiver} dalam {@link
433android.app.Activity#onStart onStart()} untuk memantau perubahan yang berdampak pada UI Anda, dan mencabut pendaftarannya
434dalam {@link android.app.Activity#onStop onStop()} bila pengguna tidak bisa lagi melihat apa yang sedang Anda
435tampilkan. Sistem bisa memanggil {@link android.app.Activity#onStart onStart()} dan {@link
436android.app.Activity#onStop onStop()} beberapa kali selama masa pakai aktivitas, sambil
437aktivitas 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
440android.app.Activity#onResume onResume()} dan panggilan ke {@link android.app.Activity#onPause
441onPause()}. Selama waktu ini, aktivitas berada di depan semua aktivitas lain pada layar dan mendapatkan
442fokus 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
444bila dialog muncul. Karena status ini bisa sering bertransisi, kode dalam dua metode ini harus
445cukup 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.
449Persegi panjang mewakili metode callback yang bisa Anda implementasikan untuk melakukan operasi saat
450aktivitas 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
456secara lebih detail dan menentukan lokasinya masing-masing dalam
457daur hidup aktivitas keseluruhan, termasuk apakah sistem bisa mematikan aktivitas setelah
458metode callback selesai.</p>
459
460<p class="table-caption"><strong>Tabel 1.</strong> Rangkuman metode callback
461daur 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
490onRestart()}</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
546onDestroy()}</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
561atau tidak mematikan proses yang menjadi host aktivitas kapan saja <em>setelah metode kembali</em>, tanpa
562menjalankan baris lain pada kode aktivitas.  Tiga metode ini ditandai "ya": ({@link
563android.app.Activity#onPause
564onPause()}, {@link android.app.Activity#onStop onStop()}, dan {@link android.app.Activity#onDestroy
565onDestroy()}). Karena {@link android.app.Activity#onPause onPause()} adalah yang pertama
566dari tiga, begitu aktivitas dibuat, {@link android.app.Activity#onPause onPause()} adalah
567metode terakhir yang dipastikan akan dipanggil sebelum proses <em>bisa</em> dimatikan&mdash;jika
568sistem harus memulihkan memori dalam keadaan darurat, maka {@link
569android.app.Activity#onStop onStop()} dan {@link android.app.Activity#onDestroy onDestroy()} mungkin
570tidak dipanggil. Karena itu, Anda harus menggunakan {@link android.app.Activity#onPause onPause()} untuk menulis
571data persisten yang penting (misalnya hasil edit pengguna) ke penyimpanan. Akan tetapi, Anda harus selektif dalam hal
572informasi yang harus dipertahankan selama {@link android.app.Activity#onPause onPause()}, karena setiap
573prosedur pemblokiran dalam metode ini akan memblokir transisi ke aktivitas berikutnya dan memperlambat
574pengalaman pengguna.</p>
575
576<p> Metode-metode yang ditandai "Tidak" dalam kolom <b>Bisa dimatikan</b> melindungi proses yang menjadi host
577aktivitas dari dimatikan sejak saat metode dipanggil.  Jadi, aktivitas bisa dimatikan
578sejak {@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
583definisi dalam tabel 1 masih bisa dimatikan oleh sistem&mdash;namun itu hany terjadi dalam
584situasi ekstrem bila tidak ada jalan lain. Kapan aktivitas bisa dimatikan
585akan dibahas selengkapnya dalam dokumen <a href="{@docRoot}guide/components/processes-and-threads.html">Proses dan
586Threading</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
592bahwa
593bila aktivitas dihentikan sementara atau dihentikan, status aktivitas akan dipertahankan. Hal itu terjadi karena
594objek {@link android.app.Activity} masih ditahan dalam memori saat aktivitas dihentikan sementara atau
595dihentikan&mdash;semua informasi tentang anggota dan statusnya saat ini masih hidup. Jadi, setiap perubahan
596yang dibuat pengguna dalam aktivitas akan dipertahankan sehingga bila aktivitas kembali ke
597latar depan (bila "dilanjutkan"), perubahan itu masih ada.</p>
598
599<p>Akan tetapi, bila sistem memusnahkan aktivitas untuk memulihkan memori, objek {@link
600android.app.Activity} akan dimusnahkan, sehingga sistem tidak bisa sekadar melanjutkan aktivitas dengan status
601tidak berubah. Sebagai gantinya, sistem harus membuat ulang objek {@link android.app.Activity} jika pengguna
602menyusuri kembali ke aktivitas tersebut. Namun, pengguna tidak menyadari
603bahwa sistem memusnahkan aktivitas dan membuatnya kembali dan, karena itu, mungkin
604mengharapkan aktivitas untuk sama persis dengan sebelumnya. Dalam situasi ini, Anda bisa memastikan bahwa
605informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan
606metode callback tambahan yang memungkinkan Anda menyimpan informasi tentang status aktivitas: {@link
607android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
608
609<p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
610sebelum membuat aktivitas rawan terhadap pemusnahan. Sistem meneruskan ke metode ini
611sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan
612informasi status tentang aktivitas sebagai pasangan nama-nilai, dengan menggunakan metode-metode misalnya {@link
613android.os.Bundle#putString putString()} dan {@link
614android.os.Bundle#putInt putInt()}. Kemudian, jika sistem mematikan proses aplikasi Anda
615dan 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
617android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu
618metode ini, Anda bisa mengekstrak status tersimpan dari {@link android.os.Bundle} dan memulihkan
619status aktivitas. Jika tidak ada informasi status untuk dipulihkan, maka {@link
620android.os.Bundle} yang diteruskan kepada adalah Anda null (yang akan terjadi bila aktivitas dibuat untuk
621pertama 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
625dengan status tetap: aktivitas dimusnahkan, kemudian dibuat kembali, dan aktivitas harus memulihkan
626status yang disimpan sebelumnya, atau aktivitas dihentikan, kemudian dilanjutkan dengan status aktivitas
627tetap.</p>
628
629<p class="note"><strong>Catatan:</strong> Tidak ada jaminan bahwa {@link
630android.app.Activity#onSaveInstanceState onSaveInstanceState()} akan dipanggil sebelum
631aktivitas 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
633secara eksplisit
634). Jika sistem memanggil {@link android.app.Activity#onSaveInstanceState
635onSaveInstanceState()}, ini akan dilakukan sebelum {@link
636android.app.Activity#onStop onStop()} dan mungkin sebelum {@link android.app.Activity#onPause
637onPause()}.</p>
638
639<p>Akan tetapi, sekalipun Anda tidak melakukan apa-apa dan tidak mengimplementasikan {@link
640android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas
641akan dipulihkan oleh implementasi default {@link
642android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya,
643implementasi default akan memanggil metode {@link
644android.view.View#onSaveInstanceState onSaveInstanceState()} yang sesuai untuk setiap {@link
645android.view.View} dalam layout, yang memungkinkan setiap tampilan untuk memberi informasi tentang dirinya
646yang harus disimpan. Hampir setiap widget dalam kerangka kerja Android mengimplementasikan metode ini
647sebagaimana mestinya, sehingga setiap perubahan yang terlihat pada UI akan disimpan dan dipulihkan secara otomatis bila
648aktivitas Anda dibuat kembali. Misalnya, widget {@link android.widget.EditText} menyimpan teks apa saja
649yang dimasukkan oleh pengguna dan widget {@link android.widget.CheckBox} menyimpan baik teks itu diperiksa maupun
650tidak. 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
652tidak 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
658metode {@link android.view.View#setSaveEnabled setSaveEnabled()}. Biasanya, Anda tidak boleh
659menonaktifkannya, namun Anda boleh melakukannya jika ingin memulihkan status UI aktivitas secara berbeda.</p>
660</div>
661</div>
662
663<p>Walaupun implementasi default {@link
664android.app.Activity#onSaveInstanceState onSaveInstanceState()} menyimpan informasi yang berguna tentang
665UI aktivitas, Anda mungkin masih perlu mengesampingkannya untuk menyimpan informasi tambahan.
666Misalnya, Anda mungkin perlu menyimpan nilai-nilai anggota yang berubah selama masa pakai aktivitas (yang
667mungkin berkorelasi dengan nilai-nilai yang dipulihkan dalam UI, namun anggota-anggota yang menyimpan nilai-nilai UI itu tidak
668dipulihkan, secara default).</p>
669
670<p>Karena implementasi default {@link
671android.app.Activity#onSaveInstanceState onSaveInstanceState()} membantu menyimpan status UI, jika
672Anda mengesampingkan metode ini untuk menyimpan informasi tambahan status, Anda harus selalu memanggil
673implementasi superkelas {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
674sebelum melakukan pekerjaan apa pun. Demikian pula, Anda juga harus memanggil implementasi superkelas {@link
675android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} jika Anda mengesampingkannya, sehingga
676implementasi default bisa memulihkan status tampilan.</p>
677
678<p class="note"><strong>Catatan:</strong> Karena {@link android.app.Activity#onSaveInstanceState
679onSaveInstanceState()} tidak dijamin
680akan dipanggil, Anda harus menggunakannya hanya untuk mencatat status aktivitas sementara (transient) (status
681UI)&mdash;Anda tidak boleh menggunakannya untuk menyimpan data persisten.  Sebagai gantinya, Anda harus menggunakan {@link
682android.app.Activity#onPause onPause()} untuk menyimpan data persisten (misalnya data yang harus disimpan
683ke 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
686perangkat sehingga orientasi layarnya berubah. Bila orientasi layar berubah, sistem
687akan memusnahkan dan membuat kembali aktivitas untuk menerapkan sumber daya alternatif yang mungkin tersedia
688untuk konfigurasi layar baru. Karena alasan ini saja, sangat penting bahwa aktivitas Anda
689memulihkan statusnya secara lengkap saat dibuat kembali, karena pengguna memutar layar secara rutin saat
690menggunakan 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
698android.app.Activity#onCreate onCreate()}). Perilaku ini
699didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang
700aplikasi Anda secara otomatis dengan sumber daya alternatif yang telah Anda sediakan (misalnya layout yang berbeda untuk
701layar orientasi dan ukuran yang berbeda).</p>
702
703<p>Jika Anda mendesain aktivitas dengan benar untuk menangani restart karena perubahan orientasi layar dan
704memulihkan status aktivitas seperti yang dijelaskan di atas, aplikasi Anda akan lebih tahan terhadap
705kejadian 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
710android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (atau {@link
711android.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
715Perubahan 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
722akan berhenti sementara dan berhenti sama sekali (walau tidak akan berhenti jika masih terlihat di latar belakang), saat
723aktivitas lain dibuat. Jika aktivitas-aktivitas ini berbagi data yang disimpan ke disk atau di tempat lain, Anda perlu
724memahami bahwa aktivitas pertama tidak dihentikan sepenuhnya sebelum aktivitas kedua dibuat.
725Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian
726aktivitas pertama.</p>
727
728<p>Urutan callback daur hidup didefinisikan dengan baik, khususnya bila kedua aktivitas berada dalam
729proses yang sama dan salah satunya memulai yang lain. Berikut ini adalah urutan operasi yang terjadi bila Aktivitas
730A 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
736android.app.Activity#onStart onStart()}, dan {@link android.app.Activity#onResume onResume()}
737Aktivitas 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
740android.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
744informasi dari satu aktivitas ke aktivitas lainnya. Misalnya, jika Anda harus menulis ke database saat
745aktivitas pertama berhenti agar aktivitas berikutnya bisa membacanya, maka Anda harus menulis ke
746database selama {@link android.app.Activity#onPause onPause()} sebagai ganti selama {@link
747android.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
753enables user multitasking, continue with the <b><a
754href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
755Stack</a></b> document.</p>
756-->
757