BAB 2 Siklus Hidup Aplikasi Android
Workshop Struktur dan Pemakaian Teknologi Game
2.1 Tujuan Pembelajaran : 1. Memahami komponen – komponen pada Android 2. Memahami Sikuls Hidup Komponen Android.
2.2 Dasar Teori 2.2.1 Komponen Aplikasi Fitur utama dari Android adalah sebuah aplikasi dapat menggunakan elemen dari aplikasi lainnya (apabila diizinkan). Contohnya, jika aplikasi anda ditugaskan untuk menampilkan daftar gambar yang dapat bergulir, maka aplikasi yang lain dapat menggunakannya untuk menampilkannya di dalam aplikasi tersebut. Anda dapat memanggil fungsi yang sama di dalam dua aplikasi tanpa harus membuatnya lagi. Untuk menggunakannya, aplikasi anda tidak akan terhubung satu sama lain. Namun elemen aplikasi tersebut akan siap secara otomatis apabila dibutuhkan. Untuk tugas ini, sistem harus dapat memulai proses sebuah aplikasi jika salah satu bagian di dalamnya dibutuhkan, dan menginstansi obyek Java untuk elemen tersebut. Oleh karena itu, berbeda dengan aplikasi di sistem yang lain, aplikasi android tidak mempunyai single entry point di dalamnya (contohnya, tidak ada fungsi main()). Namun, mereka mempunyai komponen (component) penting yang dapat diinstansi dan dijalankan oleh sistem apabila dibutuhkan. Ada 4 macam component, yaitu: 1. Activities Sebuah activity menyajikan sebuah antar muka visual yang berfokus pada usaha dari pengguna. Contohnya, sebuah aplikasi dapat menyajikan daftar menu item atau menampilkan gambar beserta keterangan yang dapat dipilih oleh pengguna. Sebuah aplikasi pengiriman teks bisa mempunyai sebuah activity yang menampilkan daftar kontak untuk mengirim pesan, activity kedua adalah menulis pesan ke kontak yang telah dipilih, dan activity yang lain adalah 26
Workshop Struktur dan Pemakaian Teknologi Game
menampilkan pesan lama atau mengubah pengaturan pesan. Walaupun activity tersebut bekerja bersama pada sebuah antar muka terpadu, namun setiap activity tidak saling bergantung satu sama lain. Setiap activity diimplementasikan sebagai turunan (subclass) dari kelas utama. Sebuah aplikasi dapat terdiri dari satu atau beberapa activity (sebagaimana dicontohkan pada aplikasi sms sebelumnya). Ragam dan banyaknya activity tersebut tergantung pada aplikasi dan perancangannya. Umumnya, sebuah activity ditugaskan sebagai activity pertama yang akan tampil ketika aplikasi dijalankan untuk kemudian dilanjutkan oleh activity berikutnya.
Ketika dijalankan, sebuah activity tampil berupa
jendela yang akan tampil memenuhi layar, atau lebih kecil dari ukuran layar, bahkan melayang di atas jendela lainnya. Sebuah activity juga dapat menggunakan jendela lain-contohnya, sebuah pop-up dialog yang membutuhkan respon pengguna di tengah activity, atau jendela yang akan menampilkan informasi khusus ketika pengguna memilih sebuah item khusus pada tampilan sebelumnya. Konten visual di dalam jendela terdiri dari beberapa tingkat tampilan-obyek yang diturunkan dari kelas View. Setiap tampilan menentukan ruangan segi empat secara khusus di dalam jendela. Tampilan parent berisi dan mengatur tata letak turunannya. Leaf views (tampilan yang terletak paling dasar pada hirarki tampilan) tergambar di dalam segi empat yang mengatur dan merespon aksi dari pengguna yang diarahkan pada posisi tertentu (space). Oleh karena itu, views merupakan tempat interaksi antara pengguna dan activity. Contohnya, sebuah tampilan dapat menampilkan sebuah gambar kecil dan menginisiasi sebuah aksi ketika pengguna menyentuh (tap) gambar tersebut. Android mempunyai banyak “tampilan jadi” yang dapat anda gunakan- termasuk button, text field, scroll bar, menu items, check boxes, dan lain-lain. Hirarki tampilan diletakkan di dalam jendela activity oleh method Activity.setContentView().
Content view merupakan obyek dari View yang
terletak pada dasar hirarki. 27
Workshop Struktur dan Pemakaian Teknologi Game
2. Services. Sebuah service tidak mempunyai tampilan antar muka, tetapi lebih kepada program yang berjalan di “belakang layar” (background) selama beberapa periode waktu tertentu. Contohnya, sebuah service dapat memainkan musik, sementara pengguna menjalankan aplikasi yang lain. Atau, service dapat mengambil data (fetching) dari jaringan, atau menghitung sesuatu dan menyajikan hasilnya ke activity yang membutuhkannya. Setiap service akan meng-extends kelas Service. Misalnya, ketika media player memainkan musik dari sebuah playlist. Aplikasi player tersebut dapat mempunyai satu atau beberapa activity yang memungkinkan pengguna untuk memilih lagu dan memainkannya. Namun, proses memainkan musik tadi tidak akan ditangani oleh sebuah activity karena pengguna mengharapkan musik tersebut akan tetap dimainkan selagi ia menjalankan aplikasi yang lain. Agar musik tetap dimainkan, activity dari media player dapat memulai sebuah service untuk dijalankan pada background. Selanjutnya sistem akan tetap menjalankan service untuk memainkan musik walaupun activity yang memulainya telah hilang dari layar. Service yang sedang berjalan dapat dihubung dan digabungkan. Ketika terhubung, anda dapat berkomunikasi dengan service melalui sebuah antar muka yang ditampilkan oleh service. Untuk service musik, antar muka ini dapat berupa pause, rewind, stop, dan restart. Seperti activities dan component lainnya, service berjalan pada thread utama pada proses aplikasi. Sehingga mereka tidak akan memblokir component atau antar muka lain. Untuk task yang membutuhkan banyak waktu, biasanya service akan membuat thread-thread baru. 3. Broadcast Receiver. Merupakan sebuah component yang menerima dan merespon broadcast announcement (siaran pemberitahuan). Banyak broadcast yang berasal dari 28
Workshop Struktur dan Pemakaian Teknologi Game
kode sistem-contohnya, pemberitahuan bahwa zona waktu telah berubah, baterai lemah, gambar yang baru saja ditangkap, atau pengguna baru saja mengganti pengaturan bahasa. Aplikasi juga dapat menginisiasi broadcast-contohnya, untuk memberi tahu aplikasi lain bahwa suatu data telah diunduh ke dalam perangkat dan siap digunakan. Sebuah aplikasi dapat memperoleh beberapa broadcast receiver untuk merespon pemberitahuan yang dianggap penting. Setiap receiver meng-ekstend kelas BroadcastReceiver. Broadcast receiver tidak menampilkan sebuah antar muka. Namun, ia akan memulai sebuah activity sebagai respon atas pemberitahuan yang diterima. Atau menggunakan
NotificationManager
untuk memperingatkan pengguna.
Notifikasi akan menarik perhatian pengguna dengan berbagai cara- membuat backlight berkedap kedip, menggetarkan perangkat, memainkan suara notifikasi, dan sebagainya. Mereka akan menempatkan ikon yang tetap pada status bar, yang dapat diakses dan pesannya dapat dibaca langsung oleh pengguna. 4. Content providers. Sebuah content provider membuat rangkaian data aplikasi sehingga dapat digunakan oleh aplikasi lainnya. Data tersebut dapat disimpan di file system, dalam sebuah basis data SQLite. Atau dalam bentuk lain yang memungkinkan. Content provider akan meng-ekstend kelas ContentProvider untuk mengimplementasikan serangkaian method yang memungkinkan aplikasi lain untuk mengambil dan menyimpan data sesuai dengan yang dikendalikannya. Namun, aplikasi tidak memanggil method ini secara langsung melainkan dengan menggunakan obyek kelas ContentResolver dan memanggil method di dalamnya. ContentResolver dapat berkomunikasi dengan content provider manapun, dan bekerja sama dengan provider untuk mengatur dan mengkomunikasikan proses intern yang terlibat.
2.2.2
Siklus Hidup Komponen
Siklus Hidup Activity 29
Workshop Struktur dan Pemakaian Teknologi Game
Sebuah activity mempunyai tiga keadaan: 1. Active, ketika ada di permukaan layar (di atas tumpukan activity pada task yang saat itu sedang berjalan). Activity inilah yang berkonsentrasi pada aksi dari pengguna 2. Pause, ketika tidak lagi berkonsentrasi pada pengguna namun tetap tampil di layar. Adanya activity lain yang tampil di atasnya, activity tersebut bisa tampil secara transparan atau tidak memenuhi tampil full screen, sehingga beberapa activity yang berstatus pause tetap dapat terlihat. Activity berstatus pause tetap berjalan (menjaga semua kondisi, informasi, dan tetap terkait pada window manager), namun dapat dinonaktifkan oleh sistem kapan saja pada saat memori lemah. 3. Stop, ketika terhalangi sepenuhnya oleh activity lain. Pada status ini, kondisi dan semua informasi tetap berjalan. Namun, activity tidak terlihat oleh pengguna dan akan dinonaktifkan oleh sistem ketika memori dibutuhkan di lokasi yang lain. Jika sebuah activity berstatus pause atau stop, maka sistem dapat menyingkirkannya dari memori dengan cara memanggil method finish() atau menonaktifkannya begitu saja. Ketika activity tersebut dipanggil lagi oleh pengguna, maka akan activity akan di-restart dan dikembalikan (restore) pada kondisi sebelumnya. Setiap perubahan status activity akan mengeluarkan notifikasi yang dapat dilakukan dengan cara memanggil method berikut ini: void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()
Semua method di atas saling terkait dan dapat anda override untuk melakukan pekerjaan yang sesuai ketika terjadi perubahan status. Semua activity harus 30
Workshop Struktur dan Pemakaian Teknologi Game
mengimplementasi onCreate() untuk melakukan pengaturan awal ketika obyek pertama kali diinstansi. onPause()
Ada beberapa method yang akan mengimplementasi
untuk menjalankan perubahan data menghentikan interaksi dengan
pengguna. Umur latar depan dari suatu Activity yang terjadi antara panggilan untuk onResume () sampai panggilan sesuai dengan onPause (). Selama ini, Activity ini di depan semua Activity lain di layar dan berinteraksi dengan pengguna. Suatu aktivitas yang dapat sering transisi antara kembali dan berhenti negara - misalnya, onPause () dipanggil saat perangkat berangkat tidur atau ketika suatu aktivitas baru dimulai, onResume () dipanggil saat hasil Activity atau niat baru disampaikan. Oleh karena itu, kode dalam dua metode harus cukup ringan. Diagram berikut menggambarkan loop tersebut dan jalur aktivitas yang dapat berlangsung antara negara. Para oval berwarna adalah negara utama Activity tersebut dapat masuk Segiempat persegi merupakan metode panggilan balik Anda bisa menerapkan untuk melakukan operasi pada saat transisi aktivitas antara negara.
31
Workshop Struktur dan Pemakaian Teknologi Game
Gambar 14 Siklus Hidup Activity
Tabel berikut ini menggambarkan masing-masing metode lebih terinci dan menempatkan itu dalam keseluruhan siklus hidup activity:
32
Workshop Struktur dan Pemakaian Teknologi Game
Table 3 Method pada Activity Life Cycle
Method
Deskripsi
Dapat dihentikan?
onCreate()
Disebut ketika aktivitas tersebut pertama kali diciptakan. Tidak Ini adalah di mana Anda harus melakukan semua set normal statis Anda up - buat tampilan, data mengikat ke daftar, dan seterusnya. Metode ini dilewatkan Bundle obyek yang berisi keadaan sebelumnya Activity itu, jika negara yang ditangkap (lihat Tabungan Negara, nanti). Selalu diikuti oleh onStart ().
onRestart()
Dipanggil setelah aktivitas dihentikan, sebelum itu Tidak menjadi
dimulai
lagi.
Selalu diikuti oleh onStart () onStart()
Dipanggil
sebelum
Activity
menjadi
terlihat
bagi Tidak
pengguna. Dilanjutkan dengan onResume () jika aktivitas tersebut datang ke depan, atau onStop () jika menjadi tersembunyi. onResume() Dipanggil sebelum Activity dimulai berinteraksi dengan Tidak pengguna. Pada titik ini Activity tersebut adalah di bagian atas aktivitas stack, dengan input pengguna akan hal itu. Selalu diikuti oleh onPause (). onPause()
Disebut ketika sistem akan mulai melanjutkan Activity Iya lain. Metode ini biasanya digunakan untuk melakukan perubahan yang belum disimpan ke data persisten, berhenti animasi dan hal-hal lain yang mungkin CPU mengkonsumsi, dan sebagainya. Ini harus melakukan apapun yang dilakukannya sangat cepat, karena aktivitas 33
Workshop Struktur dan Pemakaian Teknologi Game
berikutnya tidak akan dilanjutkan sampai kembali. Diikuti baik oleh onResume () jika aktivitas kembali kembali ke depan, atau dengan onStop () jika menjadi terlihat oleh pengguna. onStop()
Disebut ketika aktivitas tersebut tidak lagi dapat dilihat Iya oleh pengguna. Hal ini bisa terjadi karena sedang dihancurkan, atau karena Activity lainnya (baik yang sudah ada atau yang baru) telah kembali dan menutupinya. Diikuti baik oleh onRestart () jika aktivitas akan datang kembali untuk berinteraksi dengan pengguna, atau dengan onDestroy () jika Activity ini akan pergi.
onDestroy() Dipanggil sebelum Activity ini hancur. Ini adalah Iya panggilan terakhir yang Activity tersebut akan menerima. Ini bisa disebut baik karena Activity ini adalah finishing (seseorang selesai disebut () di atasnya), atau karena sistem yang sementara menghancurkan ini contoh aktivitas untuk menghemat ruang. Anda dapat membedakan antara kedua skenario dengan isFinishing () method.
Menyimpan State Activity
Ketika sistem, bukan pengguna, menutup Activity untuk menghemat memori, pengguna mungkin berharap untuk kembali ke Activity tersebut dan menemukannya dalam keadaan sebelumnya. Untuk mengambil menyatakan bahwa sebelum Activity dibunuh, Anda dapat menerapkan onSaveInstanceState () method untuk aktivitas tersebut. Android panggilan metode ini sebelum membuat Activity yang rentan menjadi hancur - yaitu, sebelum onPause () dipanggil. Ini melewati metode obyek Bundle dimana Anda dapat merekam keadaan dinamis dari Activity sebagai pasangan nama-nilai. Pada saat Activity lagi dimulai, Bundle yang dilewatkan baik untuk onCreate() dan metode yang disebut setelah onStart(), 34
Workshop Struktur dan Pemakaian Teknologi Game
onRestoreInstanceState(), sehingga salah satu atau keduanya dapat menciptakan negara ditangkap. Tidak seperti onPause () dan metode lain yang dibahas sebelumnya, onSaveInstanceState() dan onRestoreInstanceState() tidak siklus metode. Mereka tidak selalu disebut. Sebagai contoh, Android panggilan onSaveInstanceState() sebelum Activity menjadi rentan untuk dihancurkan oleh sistem, tetapi tidak mengganggu menyebutnya ketika contoh yang sebenarnya sedang dihancurkan oleh aksi pengguna (seperti menekan tombol BACK). Dalam hal ini, pengguna tidak akan berharap untuk kembali ke Activity tersebut, jadi tidak ada alasan untuk menyelamatkan statenya. Karena
onSaveInstanceState()
tidak
selalu
disebut,
Anda
harus
menggunakan hanya untuk mencatat kondisi transien Activity, bukan untuk menyimpan data persisten. Gunakan onPause() untuk tujuan sebagai gantinya. Koordinasi Activity
Ketika satu Activity mulai lain, mereka transisi mengalami baik daur hidup. Satu jeda dan mungkin berhenti, sedangkan mulai lainnya sampai. Pada kesempatan, Anda mungkin perlu untuk mengkoordinasikan Activity tersebut, satu dengan yang lain. Urutan callback siklus hidup yang didefinisikan dengan baik, terutama ketika dua Activity dalam proses yang sama: 1. Aktivitas berjalan onPause() method dipanggil. 2. Selanjutnya, OnCreate(), onStart(), dan onResume() metode yang disebut secara berurutan. 3. Kemudian, jika Activity mulai tidak lagi terlihat di layar, onStop() method dipanggil.
Siklus Hidup Service Service dapat digunakan dalam dua cara: 35
Workshop Struktur dan Pemakaian Teknologi Game
•
Hal ini dapat dimulai dan diijinkan untuk beroperasi sampai seseorang berhenti atau berhenti sendiri. Dalam mode ini, mulai dengan Context.startService memanggil () dan berhenti dengan memanggil Context.stopService (). Hal ini dapat berhenti sendiri oleh Service.stopSelf memanggil () atau Service.stopSelfResult (). Hanya satu stopService () panggilan diperlukan untuk menghentikan Service, tidak peduli berapa kali startService () dipanggil.
•
Hal ini dapat dioperasikan pemrograman menggunakan antarmuka yang mendefinisikan dan ekspor. Klien membuat sambungan ke objek Service dan menggunakan koneksi untuk memanggil ke Service tersebut. Sambungan dibentuk oleh
Context.bindService
memanggil(),
dan
ditutup
dengan
memanggil
Context.unbindService(). Beberapa klien dapat mengikat ke Service yang sama. Jika Service tersebut belum diluncurkan, bindService() opsional dapat diluncurkan. Kedua mode tidak sepenuhnya terpisah. Anda dapat mengikat ke Service yang dimulai dengan startService (). Sebagai contoh, sebuah Service musik latar belakang dapat dimulai dengan memanggil startService () dengan obyek Intent yang mengidentifikasi musik untuk bermain. Baru kemudian, mungkin ketika pengguna ingin melakukan fungsi pengawasan terhadap pemain atau mendapatkan informasi tentang lagu yang sedang diputar, Activity akan membuat sambungan ke Service dengan memanggil bindService (). Dalam kasus seperti ini, stopService () tidak akan benarbenar
menghentikan
Service
tersebut
hingga
pengikatan
terakhir
ditutup.
Seperti Activity, Service memiliki metode lifecycle bahwa Anda dapat menerapkan untuk memantau perubahan di negaranya. Tapi mereka lebih sedikit daripada metode aktivitas - hanya tiga - dan mereka publik, tidak dilindungi: void onCreate() void onStart(Intent intent) void onDestroy()
Dengan menerapkan metode ini, Anda dapat memantau dua loop bersarang dari siklus hidup Service: •
Umur seluruh Service terjadi antara waktu OnCreate () dipanggil dan onDestroy waktu () mengembalikan. Seperti Activity, Service tidak setup awal di OnCreate (), 36
Workshop Struktur dan Pemakaian Teknologi Game
dan melepaskan semua sumber daya yang tersisa dalam onDestroy (). Sebagai contoh, sebuah Service pemutaran musik dapat membuat thread di mana musik akan diputar di OnCreate (), dan kemudian berhenti thread di onDestroy (). •
Umur aktif Service dimulai dengan menelpon ke onStart (). Metode ini diserahkan objek Intent yang dikirimkan ke startService (). Service musik akan membuka Intent untuk menemukan yang musik untuk bermain, dan mulai pemutaran. Tidak ada callback setara untuk saat jasa berhenti - tidak onStop () method. OnCreate () dan onDestroy () metode dipanggil untuk semua Service, apakah
mereka dimulai dengan Context.startService () atau Context.bindService (). Namun, onStart() dipanggil hanya untuk pelayanan yang dimulai oleh startService() Diagram berikut menggambarkan metode callback untuk Service. Meskipun, itu memisahkan Service yang dibuat melalui startService dari yang dibuat oleh bindService(), perlu diingat bahwa setiap Service, tidak peduli bagaimana itu dimulai, secara potensial dapat mengizinkan klien untuk mengikat, jadi Service apapun dapat menerima panggilan onBind() dan onUnbind().
37
Workshop Struktur dan Pemakaian Teknologi Game
Gambar 15. Siklus Hidup Service
38
Workshop Struktur dan Pemakaian Teknologi Game
Workshop 2 Siklus Hidup Aplikasi A. Tujuan 1. Memahami siklus hidup Activity
B. Tugas Pendahuluan 1. Pelajari Siklus Hidup Activity dan Service
C. Percobaan a. Percobaan 1: Memahami siklus hidup Activity Langkah 1: Buat project Android baru di Eclipse dengan nama Activities
39
Workshop Struktur dan Pemakaian Teknologi Game
Gambar 16 Android Project
Langkah 2 : Pada file MainActivity.java tambahkan statement yang tercetak tebal
40
Workshop Struktur dan Pemakaian Teknologi Game
Langkah 3: Tekan F11 untuk men-debug aplikasi pada emulator Android
41
Workshop Struktur dan Pemakaian Teknologi Game
Langkah 4: Ketika Activity berjalan, maka akan terlihat jendela LogCat seperti berikut
Gambar 17 Jendela LogCat
Langkah 5: Ketika menekan tombol Home pada emulator Android, lihat pada jendela Logcat dan pesan berikut akan muncul
Langkah 6: Tekan Tombol Home kembali dan pilih icon aplikasi yang anda buat tadi kembali (nama project ini Activities), lihat jendela Logcat kembali dan pesan berikut akan muncul :
Langkah 7: Tekan tombol Phone pada Emulator sehingga activity akan sembunyi di belakang layar. Lihat jendela LogCat dan pesan ini akan muncul :
42
Workshop Struktur dan Pemakaian Teknologi Game
Langkah 8: Perhatikan bahwa event OnDestroy() tidak pernah dipanggil, menandakan bahwa activity tetap berada pada memory. Tekan tombol Back, activity akan muncul kembali, dan lihat kembali jendela LogCat :
D. Laporan Resmi Buat laporan resmi tentang penjelasan mengenai percobaan diatas.
43