https://drive.google.com/open?id=0B83hhlr8skmDVkM1Y2lZeWtDX1U
KOMPONEN APLIKASI ANDROID
Komponen aplikasi android adalah suatu bagian yang sangat penting dari suatu aplikasi Android karena dengan komponen-komponen inilah suatu aplikasi android dapat berjalan dengan baik.
Komponen-komponen ini dikendalikan oleh AndroidManifest.xml yang mendeskripsikan setiap komponen dan bagaimana mereka berinteraksi.
Berikut ini adalah 4 komponen utama yang dapat digunakan dalam sebuah aplikasi Android:
Komponen | Deskripsi |
Activities | Suatu komponen yang mengendalikan User Interface dan menangani interaksi pengguna ke layar smart phone. |
Services | Suatu komponen yang menangani proses di background yang terhubung dengan aplikasi. |
Broadcast Receivers | Suatu komponen yang menangani komunikasi antara Sistem Operasi Android dengan aplikasi. |
Content Providers | Suatu komponen yang menangani data dan masalah manajemen basis data. |
SUMBER = http://www.insinyoer.com/komponen-aplikasi-android/
HYRARCHY OF SCREEN ELEMENTS
Setiap kelompok tampilan merupakan container tak terlihat yang mengelola tampilan anak, sementara tampilan anak iniDapat berupa control masukan atau widget lain yang menggambar sebagian Dari UI.
PROSES THREAD
Proses
Secara default, semua komponen aplikasi yang sama berjalan dalam proses yang sama dan kebanyakan aplikasi tidak boleh mengubah ini. Akan tetapi, jika Anda merasa perlu mengontrol proses milik komponen tertentu, Anda dapat melakukannya dalam file manifes.
Entri manifes untuk setiap tipe elemen komponen—<activity>, <service>, <receiver>, dan <provider>—mendukung atribut android:process yang bisa menetapkan dalam proses mana komponen harus dijalankan.
Daur Hidup Proses
Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa tipe proses berdasarkan urutan prioritas (proses pertama adalah yang terpenting dan dimatikan terakhir):
- Proses Latar Depan
- Proses yang terlihat
- Proses layanan
- Proses latar belakang
- Proses kosong
Proses Latar Depan
Proses yang diperlukan untuk aktivitas yang sedang dilakukan pengguna. Proses dianggap berada di latar depan jika salah satu kondisi berikut terpenuhi:
- Proses menjadi host Activity yang berinteraksi dengan pengguna dengan (Activity dengan metode onResume() telah dipanggil).
- Proses menjadi host Service yang terikat dengan aktivitas yang sedang berinteraksi dengan pengguna.
- Proses menjadi host Service yang berjalan “di latar depan”— layanan telah memanggilstartForeground().
- Proses menjadi host Service yang menjalankan salah satu callback daur hidupnya (onCreate(), onStart(), atau onDestroy()).
- Proses menjadi host BroadcastReceiver yang menjalankan metode onReceive().
Proses yang Terlihat
Proses yang tidak memiliki komponen latar depan, namun masih bisa memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi berikut terpenuhi:
- Proses ini menjadi host Activity yang tidak berada di latar depan, namun masih terlihat oleh pengguna (metode onPause() telah dipanggil). Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga aktivitas sebelumnya terlihat berada di belakangnya.
- Proses menjadi host Service yang terikat dengan aktivitas yang terlihat (atau latar depan)
- Proses yang terlihat dianggap sangat penting dan tidak akan dimatikan kecuali jika hal itu diperlukan agar semua proses latar depan tetap berjalan.
Proses Layanan
Proses yang menjalankan layanan yang telah dimulai dengan metode startService() dan tidak termasuk dalam salah satu dari dua kategori yang lebih tinggi. Walaupun proses pelayanan tidak langsung terkait dengan semua yang dilihat oleh pengguna, proses ini umumnya melakukan hal-hal yang dipedulikan pengguna (seperti memutar musik di latar belakang atau mengunduh data di jaringan), jadi sistem membuat proses tetap berjalan kecuali memori tidak cukup untuk mempertahankannya bersama semua proses latar depan dan proses yang terlihat.
Proses Latar Belakang
Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode onStop() aktivitas telah dipanggil). Proses ini tidak memiliki dampak langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi proses latar depan, proses yang terlihat, atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan dalam daftar LRU (least recently used atau paling sedikit digunakan) untuk memastikan bahwa proses dengan aktivitas yang paling baru terlihat oleh pengguna sebagai yang terakhir untuk dimatikan. Jika aktivitas mengimplementasikan metode daur hidupnya dengan benar, dan menyimpan statusnya saat ini, menghentikan prosesnya tidak akan memiliki efek yang terlihat pada pengalaman pengguna, karena ketika pengguna kembali ke aktivitas, aktivitas itu memulihkan semua statusnya yang terlihat. Lihat dokumen Aktivitas untuk mendapatkan informasi tentang menyimpan dan memulihkan status.
Proses Kosong
Sebuah proses yang tidak berisi komponen aplikasi aktif apa pun. Alasan satu-satunya mempertahankan proses seperti ini tetap hidup adalah untuk keperluan caching, meningkatkan waktu mulai (startup) bila nanti komponen perlu dijalankan di dalamnya. Sistem sering menghentikan proses ini untuk menyeimbangkan sumber daya sistem secara keseluruhan antara proses cache dan cache kernel yang mendasarinya.
Thread
Bila aplikasi diluncurkan, sistem akan membuat thread eksekusi untuk aplikasi tersebut, yang diberi nama, “main”. Thread ini sangat penting karena bertugas mengirim kejadian ke widget antarmuka pengguna yang sesuai, termasuk kejadian menggambar. Ini juga merupakan thread yang membuat aplikasi berinteraksi dengan komponen dari toolkit Android UI (komponen dari paket android.widget dan android.view). Karena itu, thread ‘main’ juga terkadang disebut thread UI.
Selain itu, toolkit Android UI bukan thread-safe. Jadi, Anda tidak harus memanipulasi UI dari thread pekerja—Anda harus melakukan semua manipulasi pada antarmuka pengguna dari thread UI. Sehingga hanya ada dua aturan untuk model thread tunggal Android:
- Jangan memblokir thread UI
- Jangan mengakses toolkit Android UI dari luar thread UI
Thread Pekerja
Jika memiliki operasi untuk dijalankan yang tidak seketika, Anda harus memastikan untuk melakukannya di thread terpisah (thread “latar belakang” atau thread “pekerja”).
Misalnya, berikut ini beberapa kode untuk listener klik yang mengunduh gambar dari thread terpisah dan menampilkannya dalam ImageView:
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork(“http://example.com/image.png”);
mImageView.setImageBitmap(b);
}
}).start();
}
aturan kedua model thread tunggal: jangan mengakses toolkit Android UI dari luar thread UI—contoh ini memodifikasi ImageView dari thread pekerja sebagai ganti thread UI. Ini bisa mengakibatkan perilaku yang tidak terdefinisi dan tidak diharapkan, yang bisa menyulitkan dan menghabiskan waktu untuk melacaknya.
Untuk memperbaiki masalah ini, Android menawarkan beberapa cara untuk mengakses thread UI dari thread lainnya. Berikut ini daftar metode yang bisa membantu:
Misalnya, Anda bisa memperbaiki kode di atas dengan menggunakan metode View.post(Runnable):
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap bitmap =
loadImageFromNetwork(“http://example.com/image.png”);
mImageView.post(new Runnable() {
public void run() {
mImageView.setImageBitmap(bitmap);
}
});
}
}).start();
}
Kini implementasi ini thread-safe: operasi jaringan dilakukan terpisah dari thread sementara ImageView dimanipulasi dari thread UI.
Menggunakan AsyncTask
Dengan AsyncTask, Anda bisa melakukan pekerjaan asinkron pada antarmuka pengguna. AsyncTask memblokir operasi di thread pekerja kemudian mempublikasikan hasilnya di thread UI, tanpa mengharuskan Anda untuk menangani sendiri thread dan/atau penangan sendiri.
Misalnya, Anda bisa mengimplementasikan contoh sebelumnya menggunakan AsyncTask dengan cara ini:
public void onClick(View v) {
new DownloadImageTask().execute(“http://example.com/image.png”);
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected Bitmap doInBackground(String… urls) {
return loadImageFromNetwork(urls[0]);
}
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}
Anda harus membaca acuan AsyncTask untuk memahami sepenuhnya cara menggunakan kelas ini, namun berikut ini ringkasan singkat cara kerjanya:
- Anda bisa menetapkan tipe parameter, nilai kemajuan, dan nilai akhir tugas, dengan menggunakan generik
- Metode doInBackground() berjalan secara otomatis pada thread pekerja
- onPreExecute(), onPostExecute(), dan onProgressUpdate() semuanya dipanggil pada thread UI
- Nilai yang dikembalikan oleh doInBackground() akan dikirim ke onPostExecute()
- Anda bisa memanggil publishProgress() kapan saja di doInBackground() untuk mengeksekusi onProgressUpdate() pada thread UI
- Anda bisa membatalkan tugas ini kapan saja, dari thread mana saja
Metode Thread-Safe
Bila sebuah panggilan pada metode yang dijalankan dalam IBinder berasal dari proses yang sama di mana IBinder berjalan, metode ini akan dieksekusi di thread pemanggil. Akan tetapi, bila panggilan berasal proses lain, metode akan dieksekusi dalam thread yang dipilih dari kumpulan (pool) thread yang dipertahankan sistem dalam proses yang sama seperti IBinder (tidak dieksekusi dalam thread UI proses)
maka lebih dari satu pool thread bisa melibatkan metode IBinder yang sama sekaligus. Metode IBinder karenanya harus diimplementasikan sebagai thread-safe.
SUMBER= https://developer.android.com/guide/components/processes-and-threads.html?hl=id