Tugas Pekerjaan Rumah: Pelajaran 7 & 8
Daftar Isi:
- 7.1: Membuat AsyncTask
- 7.2: Terhubung ke Internet
- 7.3: Penerima Siaran
- 8.1: Notifikasi
- 8.2: Alarm Manager
- 8.3: JobScheduler
7.1: Membuat AsyncTask
Membangun dan menjalankan aplikasi
Buka aplikasi SimpleAsyncTask yang Anda buat dalam pelajaran Membuat AsyncTask. Tambahkan ProgressBar yang menampilkan persentase total waktu tidur. Bilah kemajuan akan terisi saat thread AsyncTask tidur dengan nilai rentang 0 hingga 100 (persen).
Petunjuk: Pecah waktu tidur menjadi bagian yang lebih kecil.
Referensi AsyncTask: developer.android.com/reference/android/os/AsyncTask.html
Jawablah pertanyaan berikut
Pertanyaan 1
Untuk ProgressBar
:
- Bagaimana Anda menentukan rentang nilai yang bisa ditunjukkan
ProgressBar
? - Bagaimana Anda mengubah berapa banyak bilah kemajuan yang terisi?
Pertanyaan 2
Jika AsyncTask ditetapkan seperti berikut:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
- Apa tipe nilai yang diberikan ke
doInBackground()
di AsyncTask? - Apa tipe nilai yang diberikan ke callback yang melaporkan kemajuan tugas?
- Apa tipe nilai yang diberikan ke callback yang dijalankan ketika tugas selesai?
Pertanyaan 3
Untuk melaporkan kemajuan pekerjaan yang dieksekusi oleh AsyncTask, apa metode callback yang Anda implementasikan, dan metode yang Anda panggil di subkelas AsyncTask?
- Mengimplementasikan
publishProgress()
. MemanggilpublishProgress()
. - Mengimplementasikan
publishProgress()
. MemanggilonProgressUpdate()
. - Mengimplementasikan
onProgressUpdate()
. MemanggilpublishProgress()
. - Mengimplementasikan
onProgressUpdate()
. MemanggilonProgressUpdate()
.
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Layout mencakup ProgressBar yang menyetel atribut tepat untuk menentukan rentang nilai.
- AsyncTask memecah waktu tidur total menjadi beberapa bagian dan memperbarui bilah kemajuan pada setiap bagian tersebut.
- AsyncTask memanggil metode tepat dan mengimplementasikan callback tepat untuk memperbarui bilah kemajuan.
- AsyncTask harus mengetahui tampilan yang perlu diperbarui. Tergantung pada apakah AsyncTask diimplementasikan sebagai kelas inti atau tidak, tampilan bisa diteruskan baik ke konstruktor AsyncTask atau didefinisikan sebagai variabel anggota pada Aktivitas.
7.2: Terhubung ke Internet
Membangun dan menjalankan aplikasi
Membuat aplikasi yang mengambil dan menampilkan materi laman web di URL. Aplikasi menampilkan:
- Bidang tempat pengguna memasukkan URL
- Bidang seperti menu atau spinner yang memungkinkan pengguna memilih protokol (HTTP atau HTTPS)
- Tombol yang mengeksekusi tugas saat diklik
- Tampilan bergulir dari kode sumber laman web di URL
Gunakan AsyncTaskLoader untuk mengambil kode sumber laman web di URL. Anda harus mengimplementasikan subkelas AsyncTaskLoader.
Jika koneksi ke Internet tidak tersedia ketika pengguna mengeklik tombol, aplikasi harus memberikan respons yang tepat kepada pengguna. Misalnya, aplikasi bisa menampilkan pesan seperti "Check your Internet connection and try again."
Tampilan harus berisi TextView dalam ScrollView yang menampilkan kode sumber, namun tampilan sesungguhnya dari antarmuka sepenuhnya terserah Anda. Layar Anda bisa saja terlihat berbeda daripada tangkapan layar di bawah. Anda bisa menggunakan menu munculan, spinner, atau kotak centang untuk mengizinkan pengguna memilih HTTP atau HTTPS.
Gambar di sebelah kiri menunjukkan layar awal, dengan menu munculan untuk protokol. Gambar di sebelah kanan menunjukkan contoh hasil setelah mengambil sumber laman URL yang diberikan.
Jawablah pertanyaan berikut
Pertanyaan 1
Izin apa yang dibutuhkan aplikasi Anda untuk terhubung ke Internet?
android.permission.CONNECTIVITY
android.permission.INTERNET
- Aplikasi tidak memerlukan izin khusus; semua aplikasi diizinkan untuk terhubung ke Internet.
Pertanyaan 2
Bagaimana aplikasi Anda memeriksa bahwa tersedia konektivitas Internet?
Dalam manifes:
- permintaan izin
ACCESS_NETWORK_STATE
- permintaan izin
ALL_NETWORK_STATE
- permintaan izin
NETWORK_CONNECT
Dalam kode:
- Membungkus kode untuk terhubung ke Internet dalam blok coba/tangkap, dan menangkap kesalahan
NO_NETWORK
. - Menggunakan ConnectivityManager untuk memeriksa jaringan aktif sebelum terhubung ke jaringan.
- Menampilkan dialog ke pengguna untuk mengingatkan mereka serta memastikan bahwa konektivitas Internet sudah tersedia sebelum mencoba untuk terhubung ke Internet.
Pertanyaan 3
Di mana Anda mengimplementasikan metode callback loader yang terpicu ketika loader selesai melaksanakan tugasnya?
- Pada subkelas AsyncTaskLoader. AsyncTaskLoader harus mengimplementasikan LoaderManager.LoaderCallbacks.
- Pada Aktivitas yang menampilkan hasil tugas. Aktivitas harus mengimplementasikan LoaderManager.LoaderCallbacks.
- Pada kelas Utilitas yang memperluas Obyek dan mengimplementasikan LoaderManager.LoaderCallbacks.
Pertanyaan 4
Ketika pengguna memutar perangkat, bagaimana AsyncTask dan AsyncTaskLoader berperilaku berbeda apabila mereka sedang dalam proses menjalankan tugas di latar belakang?
- Pilihan 1
- AsyncTask yang berjalan menjadi terputus dari Aktivitas meskipun terus berjalan.
- AsyncTaskLoader yang berjalan menjadi terputus dari Aktivitas namun berhenti berjalan, menjaga sumber daya sistem.
- Pilihan 2
- AsyncTask yang berjalan menjadi terputus dari Aktivitas namun berhenti berjalan, menjaga sumber daya sistem.
- AsyncTaskLoader yang berjalan memulai ulang secara otomatis eksekusi tugasnya dari awal. Aktivitas menampilkan hasil.
- Pilihan 3
- AsyncTask yang berjalan menjadi terputus dari Aktivitas meskipun terus berjalan.
- AsyncTaskLoader yang berjalan terhubung kembali secara otomatis ke Aktivitas setelah rotasi perangkat. Aktivitas menampilkan hasil.
Pertanyaan 5
Bagaimana Anda melakukan inisialisasi AsyncTaskLoader untuk mengerjakan langkah seperti melakukan inisialisasi variabel, yang harus dilakukan sebelum loader mulai menjalankan tugas latar belakang?
- Pada
onCreateLoader()
dalam Aktivitas, membuat instance dari subkelas AsyncTaskLoader. Dalam konstruktor loader melakukan tugas inisialisasi. - Pada
onCreateLoader()
dalam Aktivitas, membuat sebuah instance dari subkelas AsyncTaskLoader. Dalam metodeinit()
loader, melakukan tugas-tugas inisialisasi. - Pada Aktivitas, mengimplementasikan
initLoader()
untuk melakukan inisialisasi loader. - Melakukan tugas inisialisasi loader pada awal
loadInBackgroud()
dalam Loader.
Pertanyaan 6
Apa metode yang harus diimplementasikan AsyncTaskLoader?
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Manifes mencakup permintaan untuk izin yang sesuai.
- Menggunakan subkelas AsyncTaskLoader.
- Merespons dengan tepat jika perangkat tidak bisa terhubung ke Internet.
- Menggabungkan protokol dan laman web untuk membuat URL valid yang digunakan aplikasi untuk terhubung ke Internet.
- Mengimplementasikan metode callback Loader yang dibutuhkan.
- Menampilkan hasil dari pengambilan sumber laman web dalam TextView di ScrollView. (Tidak masalah melakukannya dalam Aktivitas yang sama, atau dengan memulai Aktivitas baru.)
7.3: Penerima Siaran
Membangun dan menjalankan aplikasi
- Membuat sebuah aplikasi yang disebut BroadcastCounter menggunakan template Empty Activity.
- Menggunakan BroadcastReceiver untuk menghitung berapa kali siaran
ACTION_POWER_CONNECTED
diterima. Petunjuk: Menetapkan BroadcastReceiver Anda sebagai kelas inti dan mendaftarkannya secara dinamis. - Menampilkan hitungan dalam tampilan TextView.
Jawablah pertanyaan berikut
Pertanyaan 1
Apa perbedaan antara mendaftar penerima siaran secara statis atau dinamis?
- Mendaftar penerima siaran secara dinamis menghubungkan operasi ke daur hidup aktivitas Anda.
- Jika mendaftarkan penerima untuk menerima siaran lokal saja, Anda harus mendaftarkannya secara dinamis; pendaftaran statis bukanlah opsi.
- Mendaftarkan penerima siaran secara statis menciptakan sebuah proses baru dalam menjalankan penerima siaran jika tidak ada proses yang berjalan terkait dengan aplikasi Anda.
- Semua hal di atas.
Pertanyaan 2
Benar atau salah? Bila penerima siaran terdaftar secara statis, penerima akan merespons kejadian siaran bahkan jika aplikasi Anda tidak berjalan.
Pertanyaan 3
Kelas apa yang digunakan untuk mengurangi risiko keamanan BroadcastReceivers ketika siaran tidak lintas-aplikasi (yaitu, siaran dikirim dan diterima oleh aplikasi yang sama)?
- SecureBroadcast
- LocalBroadcastManager
- OrderedBroadcast
- SecureBroadcastManager
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Penerima siaran mendaftar dan membatalkan pendaftaran secara dinamis dalam salah satu pasangan metode daur hidup berikut: OnResume/OnPause, OnCreate/OnDestroy, atau OnStart/OnStop.
- Penghitung akan ditampilkan dan bertambah saat ponsel dicolokkan.
8.1: Notifikasi
Membangun dan menjalankan aplikasi
Buka aplikasi NotifyMe yang Anda buat dalam pelajaran Notifikasi. Ubah notifikasi yang telah diperbarui dalam aplikasi agar menggunakan layout InboxStyle yang diperluas sebagai ganti BigPictureStyle. Gunakan data string palsu untuk setiap baris dan teks ringkasan.
Jawablah pertanyaan berikut
Pertanyaan 1
Misalkan Anda membuat sebuah aplikasi yang mengunduh sebuah karya seni setiap harinya. Setelah karya seni tersedia, aplikasi menunjukkan notifikasi kepada pengguna, dan pengguna bisa mengunduh atau melewati karya seni sehari. Apa metode PendingIntent yang Anda gunakan untuk memulai layanan mengunduh gambar?
Activity.startService()
PendingIntent.getBroadcast()
PendingIntent.getActivity()
PendingIntent.getService()
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Ketika pengguna mengetuk tombol update, notifikasi akan menjadi notifikasi InboxStyle dengan beberapa baris teks yang merepresentasikan item baris.
- Layar memiliki baris teks judul dan ringkasan, yang berubah posisinya tergantung pada API level. (Lihat Notifikasi dalam panduan desain material.)
- Gunakan kelas NotificationCompat.InboxStyle sehingga kompatibel ke belakang.
8.2: Alarm Manager
Membangun dan menjalankan aplikasi
Membuat sebuah aplikasi yang mengirimkan notifikasi saat pukul 11:11 (AM). Layar menampilkan tombol toggle untuk menghidupkan dan mematikan alarm.
Jawablah pertanyaan berikut
Pertanyaan 1
Pengaturan waktu tidak pasti menjadi setelan default AlarmManager pada API level apa? (Semua metode set()
menggunakan pengaturan waktu tidak pasti, kecuali secara eksplisit dinyatakan lain.)
- API level 16
- API level 18
- API level 19
- API level 17
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Alarm menggunakan waktu pasti. Ini berarti bahwa kode memuat pernyataan yang memeriksa bahwa API level perangkat > 19, dan menggunakan metode setExact() jika memang begitu.
- Aplikasi menampilkan notifikasi saat pukul 11:11 AM.
8.3: JobScheduler
Membangun dan menjalankan aplikasi
Membuat aplikasi yang menyimulasikan unduhan berukuran besar secara terjadwal dengan baterai dan pemakaian data sebagai pertimbangan. Aplikasi berisi tombol bertuliskan "Download Now" dan memiliki beberapa fitur berikut:
- Aplikasi memberikan notifikasi sebagai pengganti dari melakukan unduhan yang sebenarnya.
- "Unduhan" dilakukan sekali sehari, saat ponsel dalam keadaan diam namun terhubung ke listrik dan WiFi, atau ketika tombol ditekan.
- Ketika pengguna mengetuk tombol Download Now, notifikasi "pengunduhan" akan terpicu.Petunjuk :Menetapkan kelas JobService sebagai kelas inti. Dengan demikian, tombol Download Now dan JobService bisa memanggil metode yang sama untuk memberikan notifikasi.
Jawablah pertanyaan berikut
Pertanyaan 1
Apa kelas yang Anda gunakan jika menginginkan fitur seperti yang disediakan oleh JobScheduler, namun menginginkan fitur bekerja untuk perangkat yang menjalankan API level 20 dan di bawahnya?
- JobSchedulerCompat
- FirebaseJobDispatcher
- AlarmManager
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Objek JobInfo memiliki 4 set kriteria:
setRequiresCharging()
,setPeriodic()
,setRequiresDeviceIdle()
,setRequiredNetworkType()
- Aplikasi akan mogok bila kelas JobService tidak memiliki konstruktor kosong.