GEOVANNE FARELL
JobSheet
Pemrograman Sistem Bergerak
Edisi Revisi
A. LEARNING OUTCOMES PRAKTIKUM
Mengenali Android Studio, menu-menu, komponen Android Studio dan komponen-
komponen dasar aplikasi yang dibuat menggunakan Android Studio.
C. Teori Singkat
1. Activity
Merupakan satu komponen yang berhubungan dengan pengguna. Activity menangani
window (tampilan) mana yang akan di tampilkan ke dalam interface (antarmuka).
Activity memiliki daur hidup (life cycle) tersendiri yang dimulai dari onCreate hingga
onDestroy.
Main activity Android Studio
2. Intent
Komunikasi antar komponen di dalam sebuah aplikasi merupakan hal yang sangat
sering dilakukan. Inilah peran dari suatu intent. Beberapa fungsi dari intent adalah
dapat digunakan untuk menjalankan sebuah activity, mengirimkan pesan ke broadcast
receiver, dan dapat juga digunakan untuk berkomunikasi dengan service yang sedang
berjalan.
3. Fragment
Merupakan komponen view yang fleksibel dan dapat disisipkan pada sebuah tampilan
dari activity. Fragment memiliki daur hidup sendiri sehingga tidak tergantung pada
activity yang disisipkan. Fragment digunakan untuk memecah komponen pada aplikasi
agar bisa lebih fleksibel dan mudah untuk digunakan
4. Threads
Semua proses yang ada di dalam sebuah aplikasi ada di dalam thread. Secara default,
proses yang tampil di layar merupakan proses yang ada di dalam main thread / ui
thread. Bukan hanya main thread saja yang bisa kita gunakan, kita bisa membuat thread
baru yang terpisah dari main thread agar tidak menggangu proses rendering tampilan di
layar. Beberapa komponen yang bisa Anda gunakan adalah seperti handler dan
asynctask
5. Service
Service merupakan komponen tidak terlihat yang dapat digunakan untuk menjalankan
suatu proses di dalam aplikasi. Service biasanya digunakan untuk menjalankan proses
yang memakan waktu lama atau yang membutuhkan komputasi intensif. Contohnya
adalah pemutar musik dan blocking operation untuk networking.
6. Receiver
Receiver menggunakan pola publish-subscribe. Ketika terjadi sebuah event
dibangkitkan (dipublish), komponen lain yang telah mendaar untuk mendengarkan
event tersebut (subscribed) dapat menjalankan perintah-perintah tertentu.
A. LEARNING OUTCOMES PRAKTIKUM
Mahasiswa mengetahui secara detail tentang life cycle sebuah activity. Terutama untuk
melakukan aksi yang tepat, saat terjadi perubahan state activity. Callback methods yang
ada dapat digunakan untuk melakukan beragam proses terkait state dari activity.
B. ALAT dan BAHAN
1. Personal Computer dengan aplikasi Android Studio
2. Koneksi Internet
C. Teori Singkat
1. Last In, First Out (LIFO)
1. Gambar 1 Jika Anda memiliki sebuah aplikasi yang terdiri dari 2 activity, maka
activity pertama akan dijalankan setelah pengguna meluncurkan aplikasi melalui ikon
aplikasi di layar device. Activity yang ada saat ini berada pada posisi activity running
setelah melalui beberapa state onCreate (created) → onStart (started) → onResume
(resumed) dan masuk ke dalam sebuah stack activity. Bila pada activity pertama Anda
menekan sebuah tombol untuk menjalankan activity kedua, maka posisi state dari
activity pertama berada pada posisi stop. Saat itu, callback onStop() pada activity
pertama akan dipanggil. Ini terjadi karena activity pertama sudah tidak berada pada
layar foreground / tidak lagi ditampilkan. Semua informasi terakhir pada activity
pertama akan disimpan secara otomatis. Sementara itu, activity kedua masuk ke dalam
stack dan menjadi activity terakhir yang masuk.
2. Gambar 2 Activity kedua sudah muncul di layar sekarang. Ketika Anda menekan
tombol back pada physical button menu utama atau menjalankan metode finish(),
maka activity kedua Anda akan dikeluarkan dari stack. Pada kondisi di atas, state
activity kedua akan berada pada destroy. Oleh karenanya, metode onDestroy() akan
dipanggil. Kejadian keluar dan masuk stack pada proses di atas menandakan sebuah
model Last In, First Out. Activity kedua menjadi yang terakhir masuk stack (Last In)
dan yang paling pertama keluar dari stack (First Out).
C. Teori Singkat
Activity
Sebuah komponen aplikasi yang menyediakan layar yang digunakan pengguna untuk
berinteraksi guna melakukan sesuatu, miasalnya memilih no ponsel, mengambil foto,
mengirim email, atau menampilkan peta. Tiap activity diberi sebuah jendela untuk
menggambar interface penggunanya. Jendela ini biasanya mengisi layar, namunnmungkin
lebih kecil daripada layar dan mengambang diatas jendela lain.
Sebuah aplikasi biasanya terdiri atas beberapa activity yang terkait secara longgar
satu sama lain. Satu activity dalam aplikasi ditetapkan sebagai “main activity” yang
ditampilkan kepada user saat membuka aplikasi pertamakali. Tiap activity kemudian bias
memulai activity lain . Tiap activity baru di mulai activity sebelumnya akan di hentikan dan
di dorong ke atas back-stack.
D. Langkah Kerja
1. Buat proyek baru dengan klik File → New → New Project pada Android Studio
Anda.
2. Setelah muncul jendela Create New Project, atur nama aplikasi dan domain
perusahaan / website Anda. Sebaiknya jangan sama dengan apa yang ada dicontoh.
Dan jangan lupa pula untuk menentukan lokasi proyek.
3. Kemudian pilih tipe peranti (device) untuk aplikasi beserta target minimum SDK
yang akan digunakan. Pilihan target Android SDK akan mempengaruhi banyaknya
peranti yang dapat menggunakan aplikasi. Di sini kita memilih tipe peranti Phone
and Tablet dan nilai minimum SDK kita pasang ke Level 15 (Ice Cream
Sandwich). Klik Next untuk melanjutkan.
4. Lanjut, pilih empty activity, lalu next.
5. Selanjutnya, tentukan nama activity pertama kita, saat ini kita biarkan pada kondisi
apa adanya. Ingat, jika suatu saat nanti kita ingin melakukan penambahan activity ,
maka sebaiknya nama untuk activity tersebut disamakan dengan nama kelasnya dan
diakhiri dengan activity . Misal: ProfileActivity, SettingsActivity dan lain
sebagainya. Klik Finish untuk menyelesaikan.
6. Activity pertama aplikasi anda telah selesai, tunggu sampai loading gradle nya
selesai, dan pastikan koneksi lancer, jika tidak ada koneksi maka akan terjadi error
saat mau ngoding.
7. Di sebelah kanan anda adalah workspace dimana Activity anda berada dan
bernama MainActivity.java dengan layoutnya activity_main.xml. Di sebelah kiri
Anda terdapat struktur proyek, di mana nanti kita akan banyak menambahkan
berbagai komponen baru, asset dan library.
Layout activity.xml terdapat dalam folder res > layout, dan java terdapat di java >
com.example (folder pertama dalam java).
8. Selanjutnya kita akan mulai melakukan pengkodean Berikut flow umumnya. :
1. Ngoding Layout untuk user interface aplikasi
9. Buatlah dimens terlebih dahulu, dimens ini fungsinya untuk mengatur ukuran
margin layout dan tata letak pada activity, dimen dibuat di folder values dengan
cara :
Dan ketikan coding dimens seperti diatas
10. dan pada activity_main.xml (dalam folder layout), ketikkan coding berikut
Sambungan 1
Sambungan 2
Akan muncul warning pada atribut android:text pada layout tersebut. Ini karena kita
melakukan hardcoding pada nilai string-nya. Mari kita hilangkan code warning
tersebut dengan menekan Alt+Enter pada attribut android:text. Akan muncul dialog
seperti ini, pilihlah extract string resource.
Kemudian akan muncul dialog seperti di bawah ini. Sesuaikan dengan nama yang
ada.
Fungsi extract string resource akan secara otomatis menambahkan nilai dari
android:text ke dalam berkas res → values → strings.xml. Lakukan hal yang sama
pada view lainnya hingga tidak ada warning lagi. Jika kita buka berkas strings.xml,
maka isinya akan menjadi seperti ini:
Setelah berhasil ngoding layot maka tampilan pada layot akan seperti dibawah ini :
Note 1 : jika muncul lampu kuning silahkan lakukan cara diatas, jika muncul lampu merah (tanda
error) silahkan ketik ctrl+space atau alt+enter untuk melihat dan memperbaiki errornya.
11. Selanjutnya setelah selesai, lanjutkan dengan membuka berkas MainActivity.java
dan lanjutkan ngoding baris-baris dibawah ini.
Note 2 : ketiklah coding diatas SAMPAI SELESAI, abaikan errornya dahulu, setelah selesai ngoding
DENGAN TELITI (pastikan tidak ada yang tertinggal), barulah perbaiki errornya yang tertulis pada Note
1.
12. 2. Setelah selesai, silakan jalankan aplikasi dengan memilih menu Run → Run
‘app’ dari menu bar. Kemudian ada pilihan seperti ini. :
13. Sebelum run ada baiknya kita check apakah ada yang error lagi dengan cara build
dahulu klik tombol palu hijau atau tekan ctrl+F9
14. Setelah apk berhasil di run maka kan tampil emulator sevagai berikut :
E. Evaluasi dan Penugasan
C. TEORI SINGKAT
Intent
Intent adalah mekanisme untuk melakukan sebuah action dan komunikasi antar komponen
aplikasi misal activity, services, dan broadcast receiver. Ada tiga penggunaan umum
intent dalam aplikasi Android yaitu: Memindahkan satu activity ke activity lain dengan
atau tidak membawa data. Menjalankan background service, misalnya melakukan
sinkronisasi ke server dan menjalankan proses berulang (periodic/scheduler task).
Mengirimkan obyek broadcast ke aplikasi yang membutuhkan. Misal, ketika aplikasi
membutuhkan proses menjalankan sebuah background service setiap kali aplikasi selesai
melakukan booting. Aplikasi harus bisa menerima obyek broadcast yang dikirimkan oleh
sistem Android untuk event booting tersebut.
2. Implicit Intent Adalah tipe intent yang tidak memerlukan detail nama kelas yang
ingin diaktifkan. Model ini memungkinkan komponen dari aplikasi lain bisa merespon
request intent yang dijalankan. Penggunaan tipe intent ini umumnya diperuntukan
untuk menjalankan fitur/fungsi dari komponen aplikasi lain. Contohnya ketika kita
membutuhkan fitur untuk mengambil foto. Daripada membuat sendiri fungsi kamera,
lebih baik kita menyerahkan proses tersebut pada aplikasi kamera bawaan dari peranti
atau aplikasi kamera lain yang telah terinstal sebelumnya di peranti. Hal yang sama
misalnya ketika kita membutuhkan fungsi berbagi konten. Kita bisa memanfaatkan
intent untuk menampilkan aplikasi mana saja yang bisa menangani fitur tersebut.
Implementasi implicit intent ini akan sangat memudahkan bagi pengembang agar tetap
fokus pada proses bisnis inti dari aplikasi yang dikembangkan
Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari activity
ke activity lain, dengan atau tidak membawa data
C. TEORI SINGKAT
Intent adalah sebuah kelas dalam programming Android yang berfungsi untuk perpindahan
halaman.
Untuk berpindah halaman dari satu Activity ke Activity lain dengan atau tanpa data
Untuk menjalankan background Service misal dibutuhkan sebuah proses service untuk
mengambil lokasi pengguna, download file atau sikronisasi ke server
Untuk menyampaikan sebuah objek dari komponen Broadcast misal jika ingin mengetahui
jika device Android sudah selesai booting setelah diaktifkan
Intent juga merupakan suatu objek yang terdapat dalam suatu activity dimana objek tersebut dapat
komunikasi dengan activity yang lain, baik activity pada fungsi internal android misal seperti
memanggil activity dalam satu package atau beda package yang masih berada dalam satu project.
2. Implicit Intent berfungsi untuk memanggil fungsi activity yang sudah ada di fungsi
internal android seperti Dial Number, Open Browser dan lainnya.
D. LANGKAH KERJA
1. Buat projek baru di android studio, dengan nama MyIntentApp
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Jika terdapat error pada bagian dimen, maka jangan lupa untukmenambahkanfile dimens.xml secaramanual
didalam res→ values.
Untuk resource stringnya juga perlu kita tambahkan. Kita tambahkan semua string yang akan
digunakan di project ini, buka berkas strings.xml dan tambahkan kode berikut ini.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
8. Setelah itu, kembali ke file MainActivity.java dan tambahkan kodingan dibawah case
R.id.Btn_Move_activity menjadi sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Jika tidak terdapat error, maka program berhasil dijalankan, seperti contoh dibawah ini.
DIKLIK
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari
activity ke activity lain, dengan atau tidak membawa data
C. TEORI SINGKAT
Explicit intent adalah Intent yang secara ekplisit mendefinisikan komponen yang harus dipanggil
oleh Android System dengan menggunakan Class Java sebagai identifier-nya.
Pada bagian sebelumnya Anda sudah mempelajari bagaimana memindahkan satu activity ke
activity lain dengan membawa data. Dan itu sangat penting karena ketika kita mengembangkan
suatu aplikasi Android yang kompleks, akan ada banyak activity yang terlibat. Lancarnya
perpindahan activity dengan data menjadi hal yang penting untuk memberikan pengalaman yang
baik kepada pengguna.
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "DicodingAcademy
Boy");
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);
startActivity(moveWithDataIntent);
Perbedaan mendasar antara memindahkan activity dengan membawa data atau tidak, adalah
dengan menempatkan data ke obyek intent pada baris ini.
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME, "DicodingAcademy
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Boy");
moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_AGE, 5);
Kita memanfaatkan metode putExtra() untuk mengirimkan data bersamaan dengan obyek Intent.
Sedangkan metode putExtra() itu sendiri merupakan metode yang menampung pasangan key-
value dan memiliki beberapa pilihan tipe input seperti berikut :
Hampir semua tipe data untuk input value didukung oleh metode putExtra().
Get Data
Catatan : Key yang dikirimkan melalui putExtra() harus sama dengan key sewaktu mengambil
nilai dari data yang dikirimkan melalui getStringExtra().
Dalam konteks di atas, key yang digunakan untuk mengirim dan mengambil nilai data adalah
sama, yaitu EXTRA_NAME (yang bernilai “extra_name”). Nilai dari data yang dikirimkan
melalui intent disimpan ke dalam variabel name bertipe data string.
Nilai dari variabel age yang bertipe data integer berasal dari getIntent().getIntExtra(Key, nilai
default). Key yang digunakan untuk mengirimkan dan mengambil data adalah EXTRA_AGE
(yang bernilai “extra_age”). Nilai default di sini merupakan nilai yang akan digunakan jika
ternyata datanya kosong. Data kosong atau nilainya null bisa terjadi ketika datanya memang
tidak ada, atau key-nya tidak sama.
D. LANGKAH KERJA
3. Selanjutnya, buat Activity baru lagi seperti cara sebelumnya dan beri nama
MoveWithDataActivity.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
7. Dan sekarang saatnya kita menambahkan obyek Intent pada MainActivity.java seperti baris
yang ditebalkan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
9. Silakan jalankan aplikasi Anda, kemudian coba klik pada tombol Pindah Activity dengan
Data.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari
activity ke activity lain, dengan atau tidak membawa data
C. TEORI SINGKAT
Ketika mendengar kata parcel, apa yang ada di benak kalian? Apakah seperti parcel yang biasa
diberikan dari satu orang ke orang lain, pada saat lebaran? Yeah, yang dimaksud
dengan parcelable di sini kurang lebih sama dengan istilah “parcel” di dunia nyata.
Parcelable adalah suatu interface pada pemrograman Android, yang memungkinkan suatu
instansi dari kelas/objek untuk bisa disimpan dan diambil kembali dari sebuah Parcel.
Sedangkan Parcel sendiri merupakan suatu kontainer untuk menampung kelas tersebut.
Salah satu ciri dari suatu kelas yang mengimplementasikan interface Parcelable adalah adanya
static field bernama CREATOR, yang berfungsi untuk meng-generate objek yang memakai
interface Parcelable itu.
Hal itu berarti apabila kalian ingin membuat sebuah Parcelable objek, kalian harus mengikuti
model di atas. Dengan menambah-nambahkan field yang sesuai dengan kebutuhan kalian.
Kegunaan
Lantas, apa sih gunanya Parcelable objek? Gunanya banyak, salah satu yang paling penting
adalah seperti deskripsi sebuah parcel di dunia nyata. Yaitu Parcelable objek bisa diserahkan
(passed) dari satu Activity ke Activity lainnya.
Dan tidak hanya objek biasa yang bisa diserahkan/dipassingkan ke Activity lain. Kegunaan
utama dari Parcelable adalah untuk melewatkan sebuah objek yang rumit, seperti sebuah
ArrayList yang berisi objek tertentu.
Praktek nyata implementasi Parcelable saya lakukan ketika ingin mem-passing ArrayList yang
berisi objek DBLokasi pada tutorial membuat aplikasi location based service ke Activity lain.
Jika biasanya untuk melewatkan suatu value, katakanlah integer, atau String atau Double dari
satu Activity ke Activity lain di Android, kita cukup menggunakan fungsi put…() pada Bundle
dan menggunakan fungsi get…() pada Activity satunya untuk mendapatkan value yang tadi kita
lewatkan. Namun karena yang mau dilewatkan ini lumayan kompleks, maka harus digunakan
suatu siasat.
Kode DBLokasi.java yang sudah dimodifikasi adalah seperti berikut. Perhatikan bahwa kelas
DBLokasi di bawah ini tetap megikuti aturan dari model kelas yang mengimplementasikan
Parcelable seperti di atas :
package id.attwhx.twmaps;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
public DBLokasi()
{
Beberapa method ditambahkan pada kelas DBLokasi supaya sesuai dengan aturan model kelas
di atas.
Setelah sampai di Activity satunya, objek yang di-parcel kan itu diambil menggunakan fungsi
getParcelableArrayList(). Seperti kode di bawah ini.
ArrayList<DBLokasi> daftarLokasi =
b.getParcelableArrayList("daftar");
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
D. LANGKAH KERJA
1. Langkah pertama, klik kanan pada package utama → New → Java Class
3. Setelah selesai terbentuk kelas Person, kita akan kondisikan kelas tersebut menjadi
seperti ini.
Namun tidak perlu menulis satu per satu metode setter-getter nya, di Android Studio
tersedia fasilitas generator untuk hal tersebut. Caranya, setelah Anda menentukan
variabel apa saja yang akan digunakan lakukan, lakukan beberapa langkah sebagai
berikut :
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
4. Pilih Getter and Setter, atau bisa kombinasikan dengan menekan alt+insert.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
6. Secara otomatis metode setter dan getter masing-masing variabel akan dibuatkan. Seperti
berikut ini
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
7. Selanjutnya kita akan menambahkan plugin Android Parcelable Generator pada Android
Studio. Plugin ini berguna untuk mengubah kelas POJO menjadi obyek Parcelable.
Langkah-langkahnya sebagai berikut :
3. Klik Search in Repositories, dengan ini kita memerintahkan Android Studio untuk
melakukan pencarian plugin di server.
Setelah ketemu Android Parcelable code generator, klik Install
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
4. Tunggu proses instalasi plugin. Bila sukses, maka Anda akan diminta untuk
melakukan restartAndroid Studio yang sedang berjalan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
Klik Restart Android Studio → Klik OK dan jika ada pilihan untuk restart Android
Studio maka pilih restart. Biarkan Android Studio untuk restart agar plugin-nya dapat
kita gunakan setelahnya.
Catatan : Jika dialog search tidak berhasil mencari plugin, kosongkan kata
pencarian dan masukkan kembali kata pencarian "Android Parcelable". Ini bisa
terjadi karena ada error di dalam dialog Plugins.
6. Pilih Parcelable.
7. Pada dialog box yang tampil, pilih semua variable yang ada lalu klik OK.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
8. Sekarang tambahkan satu tombol lagi pada activity_main.xml pada lingkaran sebagai
berikut :
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
9. Setelah selesai, kita kenalkan button tersebut di kelas MainActivity.java, dengan cara
tambahkan kodingan berikut ini
14. Setelah kita membuat activity tujuan, sekarang kita tinggal kita tambahkan beberapa baris
kode pada bagian switch… case di mainactivity.
Codelab ini menitik beratkan pada implementasi intent untuk melakukan perpindahan dari activity ke
activity lain, dengan atau tidak membawa data.
C. TEORI SINGKAT
Implicit Intent
Adalah tipe intent yang tidak memerlukan detail nama kelas yang ingin diaktifkan. Model
ini memungkinkan komponen dari aplikasi lain bisa merespon request intent yang dijalankan.
Penggunaan tipe intent ini umumnya diperuntukan untuk menjalankan fitur/fungsi dari komponen
aplikasi lain. Contohnya ketika kita membutuhkan fitur untuk mengambil foto. Daripada membuat
sendiri fungsi kamera, lebih baik kita menyerahkan proses tersebut pada aplikasi kamera bawaan
dari peranti atau aplikasi kamera lain yang telah terinstal sebelumnya di peranti.
Hal yang sama misalnya ketika kita membutuhkan fungsi berbagi konten. Kita bisa memanfaatkan
intent untuk menampilkan aplikasi mana saja yang bisa menangani fitur tersebut.
Implementasi implicit intent ini akan sangat memudahkan bagi pengembang agar tetap fokus pada
proses bisnis inti dari aplikasi yang dikembangkan.
Fakultas Teknik UNP Padang Waktu : 3 x 50”
Jurusan : Teknik Elektronika Mata Kuliah : Mobile programming
Prodi : Pendd.Teknik Informatika Topik : Intent Sederhana
D. LANGKAH KERJA
1. Buka kembali proyek activity_main.xml tambahkan satu tombol lagi seperti dibawah ini
Setelah selesai, silakan jalankan lagi aplikasi anda. Dan buat kesimpulan !
C. Teori Singkat
Pada modul ini, kita akan membedah hubungan activity dan intent dalam menerima nilai
balik. Kadang kala, ketika kita menjalankan sebuah activity dari activity lain, kita
mengharapkan ada nilai hasil balik dari activity yang dijalankan ketika ia ditutup.
Contohnya kita memiliki activity A yang menjalankan activity B untuk melakukan sebuah
proses. Lalu nilai hasil dari proses tersebut dikirimkan kembali ke activity A sebelum
activity B ditutup dengan pemanggilan metode finish() . Itulah yang dinamakan sebuah
activity menerima nilai hasil balik dari activity yang dia jalankan.
D. Langkah Kerja
1. Sekarang untuk menerapkan konsep diatas, buat sebuah activity baru dengan nama
MoveForResultActivity . Setelah itu, pada activity_move_for_result.xml silakan
kondisikan layout kita dengan 1 buah TextView, 1 buah Radio Group, 3 buah Radio
Button dan 2 buah Button sebagai berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
3.Pada activity_main.xml tambahkan lagi satu Button dan satu TextView yang akan kita
gunakan untuk menjalankan MoveForResultActivity sebagai berikut:
4. Setelah selesai, kita lanjut garap berkas MainActivity.java . Buka berkasnya dan
sesuaikan kodenya sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
5. Setelah selesai, pastikan tidak ada bagian kode yang tertinggal. Jalankan kembali
aplikasinya, dan coba Anda pilih tombol ‘Pindah Activity untuk Result’. Pilih angka
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
yang Anda suka dan lihat hasilnya. Di MainActivity.java sudah ada angka yang tadi
Anda pilih di obyek textiew tvResult .
E. Bedah Kode
Perbedaan mendasar antara perpindahan activity untuk menghasilkan nilai balik dengan
tidak adalah pada metode untuk menjalankan obyek intent-nya. Sebelumnya kita
menggunakan startActivity(Intent) untuk berpindah activity. Kali ini kita menggunakan
startActivityForResult(Intent, RequestCode) .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Pada baris diatas, kita akan menjalankan sebuah activity melalui intent untuk nilai balik ke
activity yang menjalankan di mana nilai REQUEST_CODE adalah 110. Penentuan nilai
110 itu dibebaskan dan kalau bisa disesuaikan dengan kebutuhan pengembangan aplikasi.
Kemudian, pada MoveForResultActivity kita memilih satu angka yang kita suka, Sebagai
contoh angka 150. Kemudian tekanlah tombol ‘Pilih’. Maka baris kode dibawah ini akan
dijalankan.
Di mana akan divalidasi terlebih dahulu apakah ada nilai dari obyek RadioButton yang
dipilih. Bila ada, maka proses selanjutnya menentukan obyek RadioButton mana yang
diklik berdasarkan nilai dari rgNumber.getCheckedRadioButtonId() .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Selanjutnya, ketika sudah didapatkan nilainya, maka baris ini akan dieksekusi:
Kita membuat sebuah intent tanpa ada inputan apapun di konstruktornya. Kemudian
kita meletakkan variabel value kedalam metode putExtra(Key, Value) dengan
EXTRA_SELECTED_VALUE bertipekan static string dan bernilai “extra_selected_value”.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Kemudian kita jadikan obyek resultIntent yang telah dibuat sebelumnya menjadi parameter
dari setResult(RESULT_CODE, Intent) .
Setelah itu, kita panggil method finish() untuk menutup MoveForResultActivity . Ketika
MoveForResultActivity telah tertutup sempurna, maka metode onActivityResult() pada
MainActivity akan dijalankan.
Di sinilah MainActivity akan merespon terhadap nilai balik yang dikirimkan oleh
MoveForResultActivity . Pada baris 4 di atas, dilakukan perbandingan apakah requestCode
sama dengan yang dikirimkan oleh MainActivity .
Kemudian pada baris 5, diperiksa apakah nilai resultCode sama dengan resultCode yang
dikirim oleh MoveForResultActivity . Bila iya, maka data RadioButton yang dipilih akan
ditampilkan di textview tvResult .
Pada realita sehari-hari, konsep yang barusan kita pelajari ini akan bersinggungan dengan
aplikasi native lainnya. Misalnya, jika aplikasi kita membutuhkan gambar yang diambil dari
kamera atau gallery photo. Tentu kita mengharapkan nilai balik berupa alamat foto yang
dapat diterima oleh activity yang menjalankan. Begitu juga jika kita membutuhkan data
kontak yang berasal dari aplikasi phonebook bawaan peranti Android.
Untuk lebih dalam lagi silakan pelajari materi pada link berikut:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent dengan Result Activity
Keren! Anda sudah belajar dasar-dasar penggunaan intent secara umum di proyek aplikasi
Android. 4 intent secara eksplisit dan 1 secara implisit dengan satu di antaranya mencakup
nilai balik dari activity yang dijalankan.
C. Teori Singkat
1. Fragment merupakan komponen yang memiliki fungsi untuk menampilkan antarmuka ke
pengguna melalui activity dengan memiliki layout xml sendiri.
2. Fragment memiliki daur hidup sendiri dan bergantung penuh pada daur hidup activity
dimana ia ditanamkan.
3. Fragment digunakan agar komponen tampillan aplikasi menjadi fleksibel dan dapat
digunakan kembali (reusable).
4. Satu activity bisa memiliki lebih dari satu fragment.
5. Tidak seperti activity, fragment tidak perlu didaftarkan ke dalam file
AndroidManifest.xml .
6. Satu kelas Java dinyatakan sebagai sebuah fragment ketika kelas tersebut meng-extends
(inherit) kelas Fragment .
7. Melalui Android Support Library, fragment bersifat kompatibel sampai Android api level
10 Gingerbread.
8. Analogi yang mendekati fragment pada platform lain adalah penggunaan komponen
iframe pada aplikasi berbasis web.
Fragment LifeCycle
Ada beberapa state yang perlu kita ketahui sebelum menggunakan fragment.
1. Resumed
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment
Skema di bawah ini menunjukkan callback method apa saja yang akan
dipanggil di dalam fragment ketika terjadi perubahan pada sebuah activity.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment
Skema di atas menunjukkan bahwa perubahan state dari sebuah activity akan
mempengaruhi life cycle dari sebuah fragment. Ini karena fragment merupakan
komponen view yang bisa ditambahkan (embed) ke dalam activity.
Untuk membuat fragmen, Anda harus membuat subkelas Fragment (atau subkelasnya
yang ada). Kelas Fragmentmemiliki kode yang mirip seperti Activity. Kelas ini memiliki
metode callback yang serupa dengan aktivitas, sepertionCreate(), onStart(), onPause(),
dan onStop(). Sebenarnya , jika Anda mengkonversi aplikasi Android saat ini untuk
menggunakan fragmen, Anda mungkin cukup memindahkan kode dari metode callback
aktivitas ke masing-masing metode callback fragmen.
Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:
onCreate()
Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
melakukan inisialisasi komponen penting dari fragmen yang ingin dipertahankan saat
fragmen dihentikan sementara atau dihentikan, kemudian dilanjutkan.
onCreateView()
onPause()
Sistem akan memanggil metode ini sebagai indikasi pertama bahwa pengguna sedang
meninggalkan fragmen Anda (walau itu tidak selalu berarti fragmen sedang
dimusnahkan). Inilah biasanya tempat Anda harus mengikat setiap perubahan yang harus
dipertahankan selepas sesi pengguna saat ini (karena pengguna mungkin tidak kembali).
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment
Kebanyakan aplikasi harus mengimplementasikan setidaknya tiga metode ini untuk setiap
fragmen, namun ada beberapa metode callback lain yang juga harus Anda gunakan untuk
menangani berbagai tahap daur hidup fragmen. Semua metode callback daur hidup akan
dibahas secara lebih detail, di bagian tentang Menangani Daur Hidup Fragmen.
Ada juga beberapa subkelas yang mungkin perlu diperpanjang, sebagai ganti kelas
basis Fragment:
DialogFragment
ListFragment
PreferenceFragment
Fragmen biasanya digunakan sebagai bagian dari antarmuka pengguna aktivitas dan
menyumbangkan layoutnya sendiri ke aktivitas.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment
ViewGroup akan menjadi induk dari layout yang dimekarkan. container perlu diteruskan
agar sistem menerapkan parameter layout ke tampilan akar layout yang dimekarkan, yang
ditetapkan dalam tampilan induk yang akan dituju.
Untuk tahu lebih detail tentang fragment silakan kamu pahami baik-baik materi di link
ini: Fragments (https://developer.android.com/guide/components/fragments.html)
C. Teori Singkat
Agar Anda dapat lebih memahami topik fragment, akan ada beberapa codelab yang akan
Anda lakukan.
D. Langkah Kerja
3. Setelah tampil dialog untuk fragment, isikan HomeFragment pada kolom Fragment
Name dan uncheck untuk kedua pilihan (Include fragment factory methods dan
include interface callbacks) seperti gambar dibawah ini. Klik Finish untuk
melanjutkan penciptaan fragment.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana
Akan terjadi error pada tools:context . Tenang, yang perlu Anda lakukan adalah
menyesuaikannya dengan nama activity dan ditambahkan dengan nama package dari
project Anda.
Untuk mengatasi tanda merah pada class, jangan lupa untuk tekan (Alt + Enter) untuk
import kelas secara otomatis.
7. Sekarang, setelah selesai semua, silakan jalankan aplikasi Anda dan hasilnya haruslah
seperti ini.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana
Ketika aplikasi dijalankan, aplikasi akan menampilkan satu text dan satu button yang
dimana kedua komponen tersebut dimiliki oleh HomeFragment .
E. Bedah Kode
Dengan karakteristik seperti ini, FrameLayout merupakan sebuah layout yang paling
optimal dalam proses manipulasi penampilan obyek fragment ke layar pengguna.
Isian dari tiga parameter yang terdapat pada metode inflate() berdasarkan dari :
Boolean attachToRoot : Apakah kita akan menempelkan layout kita ke dalam root dari
parent layout yang ada. Jika ya, maka akan ditempelkan kedalam parent layout yang
ada. Jika tidak, maka hanya akan menghasilkan nilai balik dalam bentu obyek view
saja.
Kita memilih false pada attachToRoot karena pada kode ini kita ingin menambahkan
event onclick pada button-nya. Maka kita membutuhkan nilai balik berupa view.
Bacaan berikut akan memberi wawasan yang lebih dalam tentang proses inflate sebuah
layout:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Fragment Sederhana
Secara default, attachToRoot bernilai false. Jadi kita hanya inginkan mengubah layout
xml kedalam bentuk obyek view.
Sedikit berbeda pada proses casting view dari sebuah ID di dalam layout xml, disini
casting obyek Button dilakukan dengan
(Button)view.findViewById(R.id.btn_category). Kode tersebut menandakan
btn_category berada pada obyek view dimana obyek view berasal dari konversi
fragment_home.xml. Bila hanya (Button)findViewById(R.id.btn_category) , maka
btn_category berada pada root layout, activity_main.xml .
Sekarang pada MainActivity.java kita lakukan proses penempelan atau pemasangan
obyek
HomeFragment sehingga dapat ditampilkan ke layar dengan mekanisme sebagai berikut
:
Dimana,
Selanjutnya, kita akan membuat sebuah fragment lagi untuk melihat bagaimana sebuah
tampilan bisa dengan fleksibel berubah di dalam satu activity, tanpa berpindah
halaman.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity
C. Teori Singkat
Fragment merupakan komponen yang memiliki fungsi untuk menampilkan antarmuka ke
pengguna melalui activity dengan memiliki layout xml sendiri. Fragment memiliki daur
hidup sendiri dan bergantung penuh pada daur hidup activity dimana ia ditanamkan.
Fragment digunakan agar komponen tampillan aplikasi menjadi fleksibel dan dapat
digunakan kembali (reusable).
Satu activity bisa memiliki lebih dari satu fragment. Tidak seperti activity, fragment tidak
perlu didaftarkan ke dalam file AndroidManifest.xml .
D. Langkah Kerja
Buat kembali fragment baru dengan nama CategoryFragment dengan cara yang sama
seperti sebelumnya. Jangan lupa untuk meng-uncheck pilihan untuk generate default
methods dan callbacks.
2. Setelah selesai dengan layout xml, sekarang pada file CategoryFragment.java modifikasi
kodenya menjadi sebagai berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Flexible Fragment di Satu Activity
3. Pada langkah diatas kita sedang menyiapkan langkah selanjutnya, bagaimana kita bisa
mengirimkan data dari satu fragment ke fragment lain. Sekarang pada HomeFragment
tambahkan baris berikut pada method onClick().
5. Setelah selesai, silakan jalankan aplikasi lagi dan coba klik tombol Ke Halaman
Category, aplikasi sudah berpindah tampilan tanpa berpindah activity!
E. Bedah Kode
Anda telah belajar bagaiman berpindah tampilan tanpa harus berpindah activity, dengan
fragment hal tersebut menjadi terlihat mudah. Mari kita breakdown satu persatu hal baru
yang baru saja Anda tulis :
Ada yang beda disini, kita menggunakan method replace() dan bukan add() ketika ingin
menempelkan sebuah fragment baru. Ya, dengan parameter input yang sama pada method
add() , method replace() akan mengganti obyek fragment yang sedang tampil saat ini,
HomeFragment dengan obyek fragment yang baru, CategoryFragment .
C. Teori
Fragmen harus selalu tersemat dalam aktivitas dan daur hidup fragmen
secara langsung dipengaruhi oleh daur hidup aktivitas host-nya. Misalnya, saat
aktivitas dihentikan sementara, semua fragmen di dalamnya juga dihentikan
sementara, dan bila aktivitas dimusnahkan, semua fragmen juga demikian. Akan
tetapi, saat aktivitas berjalan (dalam status daur hidup dilanjutkan, Anda bisa
memanipulasi setiap fragmen secara terpisah, seperti menambah atau
membuangnya. Saat melakukan transaksi fragmen, Anda juga bisa
menambahkannya ke back-stack yang dikelola oleh aktivitas —setiap entri back-
stack merupakan catatan transaksi fragmen yang terjadi. Dengan back-stack
pengguna dapat membalikkan transaksi fragmen (mengarah mundur), dengan
menekan tombol Kembali.
Bedah Kode :
Kita memiliki dua mekanisme dalam mengirimkan data antar fragment yaitu:
Pada kode diatas, kita menggunakan obyek Bundle untuk mengirimkan data antar
fragment, perhatikan cara yang digunakan sama dengan cara yang telah kita
implementasikan sebelumnya di Activity . Setelah dibuat obyeknya dan data yang
mau dikirimkan apa kemudian kita hanya perlu
menambahkan sebaris kode berikut :
Dan cara mengambil data yang dikirimkan melalui obyek Bundle pada Fragment
tujuan sangatlah mudah hanya dengan memanggil metode getArguments() di
fragment DetailCategoryFragment seperti berikut :
Kelas Bundle merupakan kelas map data string untuk obyek-obyek parcelable. Di
sini kita bias menginputkan lebih dari satu parameter/variabel ke dalam obyek
Bundle .
Sama dengan obyek fragment seperti sebelumnya, di sini kelas fragment yang
kita buat inherit ke DialogFragment . Dengan begitu, obyek fragment sekarang
merupakan obyek dialog yang akan tampil mengambang dilayar, seperti pada
obyek modal pada platform lain, obyek DialogFragment dapat disesuaikan
tampilan dan fungsinya secara spesifik. Di sini kita menampillkan sebuah dialog
ke pengguna untuk memilih sebuah opsi yang disediakan.
Pada proses pemanggilannya pun hampir sama dengan yang kita lakukan
sebelumnya. Namun perbedaanya ada disini.
Interface adalah sebuah kelas yang terdiri kumpulan method yang hanya
memuat deklarasi dan struktur method, tanpa detail implementasinya.
Yang kemudian, metode onOptionChoosen() pada baris ini akan dipanggil untuk
menampilkan nilai dari pilihan yang dipilih pada Toast.
Cool, sejauh ini kami harap Anda sudah lebih memahami tentang bentuk dan
implementasi fragment seperti apa. Terakhir sebelum sesi ini selesai kita akan
belajar bagaimana menjalankan sebuah Activity dari fragment. Caranya pun
hampir sama dengan apa yang telah kita pelajari di Activity.
Setelah selesai semua, coba jalankan aplikasi Anda dan klik tombol Ke Halaman
Profile Activity.
A. LEARNING OUTCOMES PRAKTIKUM
Mahasiwa mampu menjelaskan fungsi dan cara kerja Threads, Handler, dan AsyncTask
pada Android.
.
C. Teori
Thread adalah sekumpulan perintah (instruksi) yang dapat dilaksanakan (dieksekusi) secara
beriringan dengan thread lainnya. Hal ini dicapai dengan menggunakan mekanisme time slice
(ketika satu CPU melakukan perpindahan antara satu thread ke thread lainnya) atau multiprocess
(ketika thread tersebut dijalankan oleh CPU yang berbeda dalam satu sistem).
Thread A dan Thread B masih tetep berjalan beriringan dengan main thread.
Secara umum semua komponen aplikasi di Android berjalan pada proses dan thread yang
sama. Ini disebut main thread atau ui thread. Secara default ini berarti sistem Android tidak
secara otomatis menciptakan thread lain untuk menjalankan proses secara spesifik.
Ada dua aturan yang harus kita perhatikan agar tercipta pengalaman pengguna yang baik
ketika menerapkan proses komputasi intensif yang memakan waktu.
1. Jangan memblok ui thread atau main thread. Ini berarti kita harus menciptakan worker
threads atau async task. Ini akan menjaga aplikasi tetap responsif.
2. Jangan melakukan pemanggilan komponen ui widget (seperti textview, button,
imageview dsb) didalam worker thread atau thread yang sedang berjalan secara
asynchronous. Ini karena Android UI Toolkit merupakan komponen yang hanya berjalan
pada ui thread.
Worker Thread
Dengan menggunakan worker thread, kita dapat menciptakan thread baru dan
menjalankan proses di thread tersebut. Terciptanya thread baru dapat memenuhi aturan no 1
tentang pengalaman pengguna yang baik, yaitu dengan tidak memblokir ui thread
Contoh bagaimana menggunakan worker threads yaitu.
Sayangnya, contoh worker thread di atas tidak memenuhi aturan no 2, yaitu jangan
melakukan pemanggilan ui di luar ui thread. Perhatikan metode setText . Metode ini adalah
bagian dari textView . Sementara itu textView adalah salah satu komponen ui. Sehingga, ia tidak
diperbolehkan untuk dijalankan di worker thread.
Agar kode di atas memenuhi aturan no 2, kita dapat menggunakan metode post milik ui
atau view.
Contohnya:
Kode run() di dalam new Thread (new runnable) berjalan secara asynchronous,
sedangkan kode run() di dalam textView.post() berjalan di ui thread.
Ada beberapa fungsi yang dapat dimanfaatkan untuk memenuhi aturan 2 yaitu:
1. Activity.runOnUiThread(Runnable)
2. View.post(Runnable)
3. View.postDelayed(Runnable , long)
Handler
Beberapa fungsi seperti view.post dapat menyelesaikan masalah tentang worker thread.
Akan tetapi menggunakan fungsi view.post akan menjadikan kode lebih kompleks dan sulit
untuk dikelola.
Solusinya adalah dengan menggunakan handler yang dapat mengirim dan memproses
message dan objek runnable lainnya yang berhubungan dengan thread. Ketika handler
diciptakan, maka dia terkait dengan thread dimana diciptakan.
Berikut adalah contoh perubahan yang dapat kita lakukan:
Dengan mendeklarasikan obyek handler pada ui thread maka obyek handlers diikat ke ui
thread.
Ketika suatu message dikirim ke handler, maka handler akan memprosesnya. Proses dari
message tersebut terjadi pada ui thread sehingga aturan no 2 dapat terpenuhi.
AsyncTask
Asynctask adalah komponen pada Android yang memiliki kemampuan untuk
menjalankan proses secara asynchronous. Ia tetap bisa berkomunikasi dengan ui thread untuk
mengirimkan hasil proses yang dilakukannya, tanpa melanggar dua aturan utama yang dijelaskan
sebelumnya. Selain itu, asynctask sangat mudah dan sederhana untuk diterapkan.
Poin-poin penting tentang asynctask:
1. Diperuntukan untuk proses asynchronous dan mampu berkomunikasi dengan ui thread
untuk mengirimkan hasil proses.
2. Kelas Java yang dibuat harus inherit kepada AsyncTask .
3. Kasus umum yang biasa diterapkan adalah ketika mengunduh berkas dari Internet dan
dengan menampilkan perkembangan pengunduhan di layar.
Params, Progress, dan Result
3 argument di atas menunjukkan tipe data apa yang digunakan di dalam asynctask. Argument
pertama adalah params , kedua adalah progress , dan ketika adalah result .
3. onProgressUpdate()
Metode ini yang akan menerima input dari apa yang dilakukan oleh metode
publishProgress . Proses umum yang terjadi adalah memperbarui persentasi dari tampilan
progress bar seperti ini.
4. onPostExecute()
Setelah proses di doInBackground() selesai, maka hasilnya akan dikirimkan ke metode
onPostExecute() . Kemudian prosesnya akan dikembalikan lagi ke ui thread. Disinilah
proses penampilan atau proses lain yang menunjukkan bahwa AsyncTask telah selesai
dijalankan.
Dalam contoh di atas, kita bisa menampilkan berkas yang baru saja diunduh.
Running Asynctask
Untuk menjalankan AsyncTask , caranya adalah dengan menuliskan kode baris :
Baris diatas akan membuat asynctask berjalan secara berurutan berdasarkan proses dan tanggung
jawab pada setiap metode didalamnya.
C. Teori
Asynctask adalah komponen pada Android yang memiliki kemampuan untuk
menjalankan proses secara asynchronous. Ia tetap bisa berkomunikasi dengan ui
thread untuk mengirimkan hasil proses yang dilakukannya, tanpa melanggar dua
aturan utama yang dijelaskan sebelumnya. Selain itu, asynctask sangat mudah dan
sederhana untuk diterapkan.
Poin-poin penting tentang asynctask:
1. Diperuntukan untuk proses asynchronous dan mampu berkomunikasi
dengan ui thread untuk mengirimkan hasil proses.
2. Kelas Java yang dibuat harus inherit kepada AsyncTask .
3. Kasus umum yang biasa diterapkan adalah ketika mengunduh berkas dari
Internet dan dengan menampilkan perkembangan pengunduhan di layar.
Kita buat sebuah proyek aplikasi bernama MyAsyncTask dengan Empty Activity
(konfigurasi dasar) seperti pada sebelumnya.
1. Jika sudah, kondisikan agar activity_main.xml menjadi seperti ini:
Kita memiliki sebuah obyek TextView berID tv_status yang akan
menampilkan proses yang sedang dijalankan oleh obyek AsyncTask .
2. Selanjutnya lengkapi kode pada MainActivity sehingga menjadi seperti
ini:
3. Sekarang, silakan jalankan aplikasi MyAsyncTask dan perhatikan obyek
TextView akan melakukan perubahan status terhadap obyek
DemoAsyncTask yang dijalankan.
Pada metode doInBackground() , kita hanya menulis log prosesnya saja. Bukan
sebuah
pendekatan yang baik untuk mengakses komponen antarmuka yang berada pada
thread utama (main thread) ke dalam background thread.
Bedah Kode :
Proyek yang kita kerjakan adalah contoh sederhana dari penggunaan AsyncTask
untuk membuat proses berjalan secara asynchronous dan tetap bisa berkomunikasi
(synchronize) dengan ui thread.
Setiap eksekusi dari metode dari AsyncTask yang kita buat kita pantau dengan
menggunakan sebuah textview tvStatus.
Nilai dari string s adalah ‘Halo ini Demo AsyncTask’ dan hasilnya akan menjadi
seperti berikut :
C. Teori
Activity dan fragment adalah dua komponen yang memberikan pengalaman kepada pengguna
secara langsung. Pengguna dapat melihat dan berinteraksi diatasnya.
Service berada pada sisi yang lain, komponen ini tidak memiliki antarmuka dan bahkan
pengguna tidak akan akan tahu bagaimana dia bekerja. Pengalaman yang diberikan oleh service
hanya berupa proses yang tidak terlihat. Ia digunakan untuk menjalankan beragam macam proses
yang memakan waktu lama.
Walaupun berjalan secara background, pada dasarnya service dan komponen Android lainnya
berjalan pada satu proses dan thread yang sama yaitu main thread atau ui thread. Bekerja di
background bukan berarti ia bekerja secara asynchronous. Service tetap membutuhkan thread
terpisah jika kita ingin melakukan proses yang membutuhkan komputasi intensif atau yang
memakan waktu.
C. Teori Singkat
Kita telah belajar mengenai activity dan implementasinya. Activity dan fragment adalah
dua komponen yang memberikan pengalaman kepada pengguna secara langsung. Pengguna
dapat melihat dan berinteraksi diatasnya. Service berada pada sisi yang lain, komponen ini
tidak memiliki antarmuka dan bahkan pengguna tidak akan akan tahu bagaimana dia
bekerja. Pengalaman yang diberikan oleh service hanya berupa proses yang tidak terlihat.
Ia digunakan untuk menjalankan beragam macam proses yang memakan waktu lama.
1. Started
Service berjenis ini adalah tipe yang dijalankan oleh komponen lain, misal activity. Sekali
dijalankan, service ini akan berjalan selama belum dimatikan atau proses yang dijalankan
selesai. Sevice akan tetap berjalan walaupun komponen yang lain dimatikan oleh system
Android. Umumnya penggunaan service ini adalah untuk melakukan proses yang tidak
memberikan nilai balik ke komponen yang memanggilnya. Contohnya adalah, mengunduh
atau mengunggah berkas.
2. Bound
Service jenis ini merupakan tipe service yang dijalankan oleh komponen lain, namun saling
mengikat. Hubungan yang terjadi antar kedua komponen tersebut seperti client-server. Bisa
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana
saling menerima hasil dan menerima request yang ada. Pada service ini dimungkinkan
terjadi proses IPC (Interprocess Communication).
Service ini akan tetap berjalan di background selama masih ada komponen lain yang
mengikatnya. Jika tidak, maka Service akan dimatikan oleh sistem. Aplikasi pemutar music
merupakan salah satu jenis aplikasi yang mengimplementasikan service jenis ini. Pada
bagian ini kita akan sepenuhnya membahas service berjenis started. Tipe service tersebut
akan dibagi menjadi dua bagian dalam implementasinya:
Kelas service yang inherit langsung kepada kelas Service Ketika sebuah kelas java
inherit ke service ingin menjalankan proses yang memakan waktu lama, maka kelas
tersebut diharuskan membuat thread terpisah agar tidak memblok ui thread yang
ada. Service ini akan selalu hidup di background selama tidak ada komponen yang
memanggil stopService() atau dimatikan oleh sistem.
Kelas service yang inherit ke IntentService
Ini adalah kelas yang sangat memudahkan hidup kita. Dia bersifat fire and forget,
ketika ia telah menyelesaikan tugasnya, ia akan mematikan dirinya.
Setiap kelas Java dinyatakan sebuah service bila kelas tersebut inherit/extends ke
kelas Service atau IntentService .
Service memiliki life cycle-nya sendiri dan bergantung pada tipe service apa yang
digunakan, started atau bound service.
D. Langkah Kerja
4. Lanjut, buat kelas service bernama OriginService dengan cara klik kanan pada
package project → New → Service → Service. OriginService akan inherit
(extends) kepada kelas Service .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana
5. Selanjutnya pada dialog yang tampil, isikan nama kelas service yang diinginkan. Di
sini kita menamainya sebagai OriginService dan biarkan exported dan enabled
tercentang. Klik Finish untuk menyelesaikan proses.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana
7. Berkas AndroidManifest sudah dibuat secara otomatis. Dengan demikian kita sudah
bisa menjalankan kelas service tersebut. Namun, sebelum menjalankan aplikasi,
lengkapi kode pada OriginService menjadi seperti berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana
10. Sekarang jalankan aplikasi. Klik tombol ‘start service’ dan perhatikan pada log-nya.
OriginService telah dijalankan dan tidak akan pernah mati sampai dimatikan oleh
sistem atau metode stopSelf() atau stopService() dijalankan
11. Baik, sekarang kita akan menambahkan sebuah inner class AsyncTask . Ia seakan-
akan menjalankan sebuah proses secara asynchronous dan
mematikan/menghentikan dirinya sendiri dengan memanggil metode stopSelf() .
Lengkapi kodenya menjadi sebagai berikut:
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Service Sederhana
12. Jalankan aplikasinya. Klik tombol ‘start service’ dan perhatikan log-nya. Service
dijalankan secara asynchronous dan mematikan dirinya sendiri setelah proses
selesai.
13. Jika berhasil dijalankan, pada log androiod monitor akan seperti ini :
09-22 09:52:25.028 10209-10209/com.dicoding.myserviceapp D/OriginService:
OriginService
dijalankan
09-22 09:52:28.074 10209-10209/com.dicoding.myserviceapp D/OriginService:
StopService
09-22 09:52:28.078 10209-10209/com.dicoding.myserviceapp D/OriginService:
onDestroy()
E. Bedah Kode
Pada metode tersebut, kita menjalankan sebuah thread asynctask untuk melakukan proses
yang menyerupai proses yang sulit. Dan ia berjalan secara asynchronous. Kekurangan
dari service tipe ini adalah tidak menyediakan worker thread diluar ui thread secara
default. Jadi tidak ada cara lain, selain membuat thread secara sendiri.
C. Teori Singkat
Kita telah belajar mengenai activity dan implementasinya. Activity dan fragment adalah
dua komponen yang memberikan pengalaman kepada pengguna secara langsung. Pengguna
dapat melihat dan berinteraksi diatasnya. Service berada pada sisi yang lain, komponen ini
tidak memiliki antarmuka dan bahkan pengguna tidak akan akan tahu bagaimana dia
bekerja. Pengalaman yang diberikan oleh service hanya berupa proses yang tidak terlihat.
Ia digunakan untuk menjalankan beragam macam proses yang memakan waktu lama.
D. Langkah Kerja
Pada titik ini, Anda sudah bisa membuat sebuah service yang berjalan di background.
1. Sekarang, buat kembali sebuah service dengan nama DicodingIntentService dengan cara
klik kanan pada package utama project → New → Service → Service (Intent Service).
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service
2. Pada dialog yang tampil, masukkan nama nama DicodingIntentService seperti ini :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service
Klik Finish untuk menyelesaikan proses. Pastikan untuk tidak mencentang include helper.
Include helper akan menambahkan metode yang dapat membantu di dalam pembuatan services.
Akan tetapi pada modul ini, kita tidak menggunakan metode tersebut.
Setelah selesai semua, silakan jalankan kembali aplikasinya dan perhatikan proses yang
terekam pada log aplikasi di Android Studio.
09-22 10:32:25.555 10209-28872/com.dicoding.myserviceapp D/DicodingIntentService:
onHandleIntent()
09-22 10:32:30.557 10209-10209/com.dicoding.myserviceapp D/DicodingIntentService:
onDestroy()
E. Bedah Kode
Kita tinjau kembali skenarionya. Kita menjalankan IntentService tersebut dengan sebuah obyek
intent yang membawa data dari MainActivity . Kita dapat menentukan berapa lama service ini
akan berjalan.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Intent Service
Kode diatas akan dijalankan pada thread terpisah secara asynchronous. Jadi kita tidak
membutuhkan lagi obyek AsyncTask seperti pada service sebelumnya.
Terakhir, IntentService tidak perlu mematikan dirinya sendiri. Service ini akan berhenti dengan
sendirinya ketika sudah menjalankan tugasnya.
Hingga saat ini, Anda sudah mempelajari teori dasar dari service. Pada modul berikutnya, Anda
akan menerapkan service pada kasus yang lebih nyata.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Receiver
C. Teori Singkat
Ketika mengembangkan sebuah aplikasi di Android, adakalanya kita butuh menjalankan
suatu proses tertentu ketika sebuah proses lain telah terjadi. Misal kita ingin menjalankan
sesuatu ketika device Android sudah selesai booting dengan sempurna. Kemampuan ini
dapat kita manfaatkan untuk memberi pengalaman yang lebih baik.
C. Teori Singkat
Dua mekanisme umum dalam dalam memanfaatkan komponen broadcast receiver yaitu :
Implementasi broadcast receiver untuk menerima event yang di-broadcast oleh
sistem Android.
Kali ini kita akan menerima broadcast ketika ada sms yang masuk.
Implementasi broadcast receiver untuk komunikasi antar aplikasi
D. Langkah Kerja
1. Buat project aplikasi dengan nama SmsListenerApp . Tetap gunakan EmptyActivity.
2. Pada activity_main.xml , ubah komponen TextView menjadi :
4. Lalu buka berkas styles.xml pada direktori resource res → values dan tambahkan
style baru seperti ini :
5. Sehingga kode dari styles.xml secara keseluruhan akan menjadi seperti ini :
Ide nya adalah kita akan menampilkan sebuah activity yang seolah-olah menjadi
sebuah dialog.
7. Selanjutnya kita akan membuat sebuah kelas Receiver dengan cara klik kanan pada
package project utama → New → Other → BroadcastReceiver.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
8. Pada dialog yang tampil isikan SmsReceiver dan klik Finish untuk menyelesaikan.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
9. Setelah tercipta, secara otomatis kelas BroadcastReceiver yang kita buat sudah
teregistrasi di berkas AndroidManifest.xml .
10. Setelah selesai, silakan lengkapi kodenya menjadi sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
12. Dan tambahkan baris intent-filter di dalam tag yang kita punya seperti dibawah ini:
Permission Marshmallow
Bila Anda memiliki peranti Android dengan versi Marshmallow keatas, maka Anda perlu
memberikan permission pada aplikasi untuk mengirimkan SMS. Caranya, buka settings →
Application → MyBroadcastReceiver → Permissions → SMS (diaktifkan)
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
Emulator
Anda bisa menggunakan fitur dari emulator untuk mengirim sebuah sms. Ikuti cara berikut ini.
1. Masuk ke menu More dari emulator. Klik tanda ... di sebelah kanan emulator anda.
2. Kemudian pilih menu Phone.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
Telnet
Anda dapat menggunakan aplikasi telnet untuk mengirim sms ke emulator. Bila anda
menggunakan
OS windows, aplikasi telnet tidak aktif secara default dan perlu diaktifkan melalui program and
features.
1. Untuk dapat mengirim sms ke emulator, telnet harus membuka koneksi ke emulator
menggunakan fungsi open localhost . Port di sini biasanya diisikan angka 5554. Contoh
melakukan koneksi ke emulator sebagai berikut.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
2. Setelah itu Anda diharuskan untuk memasukkan proses authentication dengan menggunakan
fungsi auth. Kode ini bisa didapatkan pada directory user\NAMA_USER\ dalam berkas
.emulator_console_auth_token. Buka berkas dengan menggunakan editor dan copy paste kode
yang ada di dalamnya. Contoh melakukan authentication ke emulator adalah sebagai berikut.
3. Setelah proses autentikasi selesai, maka kita dapat langsung mengirimkan SMS ke emulator
dengan menggunakan fungsi sms send . Contohnya sebagai berikut.
E. Bedah Kode
Komponen broadcast receiver yaitu SmsReceiver akan bereaksi ketika ada SMS yang masuk.
Hal ini tertuang di dalam AndroidManifest.xml seperti berikut :
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
Di metode onReceive() , receiver akan memproses metadata dari SMS yang masuk. Selanjutnya
ReceiverActivity akan dijalankan dengan membawa data melalui sebuah intent showSmsIntent .
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana
Kita memanfaatkan fasilitas yang terdapat pada kelas SmsManager dan SmsMesssage untuk
melakukan pemrosesan SMS. Untuk memperoleh obyek dari kelas SmsMessage , yaitu obyek
currentMessage , kita menggunakan metode getIncomingMessage() . Metode ini akan
mengembalikan currentMessage berdasarkan OS yang dijalankan oleh perangkat Android. Hal
ini perlu dilakukan karena metode SmsMessage.createFromPdu((object); sudah deprecated di
Marshmallow.
Fakultas Teknik UNP Padang Waktu : 3 X 50”
Jurusan : Teknik Elektronika Mata Kuliah : Pemrograman Sistem Bergerak
Prodi : Pendd. Teknik Informatika Topik : Android Developer Expert
Kode : TIK203 Judul : Broadcast Sederhana