Belajar Android Mengenal Service Bagian 1
Service pada Android sebelum
masuk materi utama para pembaca sekalian tentu pernah menonton
pertandiangan bulutangkis atau baminton. Kalau kita perhatikan sewaktu
nonton pertandingan bulutangkis, pasti pernah mendengar kata service.
Yah
service adalah pukulan bola pertama kali kepada tim
yang baru saja mendapatkan point. Kita tidak akan bicara banyak tentang
service di bulutangkis. Kita akan bahas tentang Service di Android.
Service adalah Komponen Aplikasi android yang bekerja dibelakang
layar, tanpa user interface dan interaksi dengan user. Kalau kita
analogikan dengan dunia nyata misalnya di film peran service ini adalah
orang-orang yang dibelakang layar seperti penata music, penata gambar,
penata rias, kameramen, sutradara dan lainnya.
Kalau yang sudah pakai android, pasti terkesan dengan GMAIL yang
tanpa kita buka Aplikasinya bisa menotifikasi kalau ada email baru
masuk.
Saat ini kita belum pantas berandai-andai untuk buat aplikasi seperti
GMAIL kalau konsep dasar Service aja tidak tahu, sekarang mari kita
mulai dari yang sederhana. Walaupun membosankan dan melelahkan tapi
kalau kita jalani dengan sepenuh hati insya Allah hasilnya akan banyak
manfaatnya. Jujur saja saya sering cepat ngantuk kalau baca buku
programming apa lagi bahasa inggris hehe
tapi kalau baca Novel best Seller mata seakan bersemangat untuk
menghabiskannya. Padahal kalau dilihat dari sisi manfaat harusnya kita
lebih semangat.
Yuk kita mulai Aplikasi Service Sederhana.
- Buat Android Project dengan Nama LearnService
- Buat Class baru dengan nama TheService
01 | package net.agusharyanto.learnservice; |
03 | import android.app.Service; |
04 | import android.content.Intent; |
05 | import android.os.IBinder; |
06 | import android.widget.Toast; |
08 | public class TheService extends Service { |
10 | public IBinder onBind(Intent arg0) { |
15 | public int onStartCommand(Intent intent, int flags, int startId) { |
18 | Toast.makeText( this , "The Service Started" , Toast.LENGTH_LONG).show(); |
23 | public void onDestroy() { |
25 | Toast.makeText( this , "The Service Destroyed" , Toast.LENGTH_LONG).show(); |
Perhatikan Class
TheService mengekstend class
Service ini menandakan bahwa Class TheService dinyatakan sebagai Service.
Pada Service diatas kita mengimplementasika 3 method.
- Method onBind(). Method ini membuat kita dapat mengkomunikasikan Activity dengan Service.
- Method onStartCommand(). Method ini akan dipanggil pada saat Service diStart dengan perintah startService(). Jika pada method ini kita mereturn START_STICKY maka service akan jalan terus sampai Service di Stop.
- Method onDestroy(). Method ini dipanggil ketika service distop.
4. Agar service kita dapat digunakan, harus didaftarkan pada
AndroidManifest.xml. Caranya dengan menambahkan
<service android:name=“.TheService” />
01 | xml version = "1.0" encoding = "utf-8" ?>
|
03 | package = "net.agusharyanto.learnservice" |
04 | android:versionCode = "1" |
05 | android:versionName = "1.0" > |
08 | android:minSdkVersion = "14" |
09 | android:targetSdkVersion = "17" /> |
12 | android:allowBackup = "true" |
13 | android:icon = "@drawable/ic_launcher" |
14 | android:label = "@string/app_name" |
15 | android:theme = "@style/AppTheme" > |
17 | android:name = "net.agusharyanto.learnservice.LearnServiceActivity" |
18 | android:label = "@string/app_name" > |
20 | < action android:name = "android.intent.action.MAIN" /> |
22 | < category android:name = "android.intent.category.LAUNCHER" /> |
25 | < service android:name = ".TheService" /> |
5. Sekarang kita kerjakan bagian User Interfacenya, edit
main.xml, lalu ketikkan kode berikut
01 | xml version = "1.0" encoding = "utf-8" ?>
|
03 | android:layout_width = "fill_parent" |
04 | android:layout_height = "fill_parent" |
05 | android:orientation = "vertical" > |
08 | android:id = "@+id/btnStartService" |
09 | android:layout_width = "fill_parent" |
10 | android:layout_height = "wrap_content" |
11 | android:onClick = "startService" |
12 | android:text = "Start Service" /> |
15 | android:id = "@+id/btnStopService" |
16 | android:layout_width = "fill_parent" |
17 | android:layout_height = "wrap_content" |
18 | android:onClick = "stopService" |
19 | android:text = "Stop Service" /> |
Pada code diatas kita membuat dua Button yaitu button Start Serviceyang apabila diklik akan menjalankan method startServicedan Stop Service yang apabila diklik akan menjalankan method stopService
5. Buka file
LearnServiceActivity.java, lalu ketikkan kode berikut
01 | package net.agusharyanto.learnservice; |
03 | import android.app.Activity; |
04 | import android.content.Intent; |
05 | import android.os.Bundle; |
06 | import android.view.View; |
08 | public class LearnServiceActivity extends Activity { |
11 | protected void onCreate(Bundle savedInstanceState) { |
12 | super .onCreate(savedInstanceState); |
13 | setContentView(R.layout.main); |
16 | public void startService(View view) { |
17 | startService( new Intent(getBaseContext(), TheService. class )); |
20 | public void stopService(View view) { |
21 | stopService( new Intent(getBaseContext(), TheService. class )); |
Pada saat Aplikasi ini dijalankan maka akan Menjalankan LearnServiceActivity dan langsung mengeksekusimethod onCreate dalam hal ini kan menmapilkan user interface yang telah kita buat pada file main.xml.Perhatikan method startService disini terdapat syntak yang digunakn untuk menstart Sebuah Service
dalam hal ini TheService.class Dengan menggunakan perintah
startService(new Intent(getBaseContext(), TheService.class));
Sedangkan pada method stopService akan Menstop Service dengan menjalankan perintah
stopService(new Intent(getBaseContext(), TheService.class));
7. Saatnya kita jalankan program kita, lalu klik Start Service maka akan menampikan Toast “The Service Started”
Klik button Stop Service maka akan menampilkan Toast “Stop Service”
Wah, kalau cuma gitu doang mah buat apa pakai service. Tenang ini baru awal, berlanjut ke
tutorial android Service Bagian 2
Belajar Android Mengenal Service Bagian 2
Setelah memahami tutorial
Belajar Android Mengenal Service Bagian 1 mari kita melangkah kebagian yang lebih seru dalam penggunaan service ini, topiknya kali ini adalah
memanfaatkan service untuk proses yang memakan waktu lama, misalnya mendownload file.
Oke kita mulai saja
1. Buka kembali project
LearnService
2. Edit File Class
TheService lalu ketikan kodenya seperti dibawah ini.
01 | package net.agusharyanto.learnservice; |
03 | import java.net.MalformedURLException; |
06 | import android.app.Service; |
07 | import android.content.Intent; |
08 | import android.os.IBinder; |
09 | import android.widget.Toast; |
11 | public class TheService extends Service { |
13 | public IBinder onBind(Intent arg0) { |
18 | public int onStartCommand(Intent intent, int flags, int startId) { |
23 | int result = DownloadFile( new URL( |
25 | Toast.makeText(getBaseContext(), "Downloaded " + result + " bytes" , |
26 | Toast.LENGTH_LONG).show(); |
27 | } catch (MalformedURLException e) { |
34 | private int DownloadFile(URL url) { |
38 | } catch (InterruptedException e) { |
47 | public void onDestroy() { |
49 | Toast.makeText( this , "The Service Destroyed" , Toast.LENGTH_LONG).show(); |
3. Tambahkan Permision Internet pada AndroidManifest.xml
“android.permission.INTERNET”
>
4. Sekarang mari kita jalankan programnya.
Lho Kok 100 bytes pak, padahalkan filenya
53kb. Hehe jelas bang, kan memang kita belum melakukan pemanggilan ke server.
Nah untuk yang ada kaitannya dengan komunikasi dengan server kita dianjurkan untuk menggunakan AssynchTask.
4. Ubah kembali class TheService lalu rubah codenya mejadi seperti ini.
01 | package net.agusharyanto.learnservice; |
03 | import java.io.IOException; |
04 | import java.net.MalformedURLException; |
06 | import java.net.URLConnection; |
08 | import android.app.Service; |
09 | import android.content.Intent; |
10 | import android.os.AsyncTask; |
11 | import android.os.IBinder; |
12 | import android.util.Log; |
13 | import android.widget.Toast; |
15 | public class TheService extends Service { |
17 | public IBinder onBind(Intent arg0) { |
22 | public int onStartCommand(Intent intent, int flags, int startId) { |
27 | new DoBackgroundTask().execute( new URL( |
32 | } catch (MalformedURLException e) { |
39 | private int DownloadFile(URL url) { |
43 | URLConnection urlConnection = url.openConnection(); |
44 | urlConnection.connect(); |
45 | file_size = urlConnection.getContentLength(); |
46 | } catch (IOException e) { |
54 | private class DoBackgroundTask extends AsyncTask { |
55 | protected Long doInBackground(URL... urls) { |
56 | int count = urls.length; |
57 | long totalBytesDownloaded = 0 ; |
58 | for ( int i = 0 ; i < count; i++) { |
59 | totalBytesDownloaded += DownloadFile(urls[i]); |
62 | publishProgress(( int ) (((i + 1 ) / ( float ) count) * 100 )); |
64 | return totalBytesDownloaded; |
67 | protected void onProgressUpdate(Integer... progress) { |
68 | Log.d( "Downloading files" , String.valueOf(progress[ 0 ]) |
70 | Toast.makeText(getBaseContext(), |
71 | String.valueOf(progress[ 0 ]) + "% downloaded" , |
72 | Toast.LENGTH_LONG).show(); |
75 | protected void onPostExecute(Long result) { |
76 | Toast.makeText(getBaseContext(), "Downloaded " + result + " bytes" , |
77 | Toast.LENGTH_LONG).show(); |
83 | public void onDestroy() { |
85 | Toast.makeText( this , "The Service Destroyed" , Toast.LENGTH_LONG).show(); |
5. Sekarang mari kita jalankan kembali
Pada kode diatas ketika tombol
Start Service ditap, maka service akan mengeksekusi perintah yang ada dalam method
onStartCommand yang akan mendowload 4 file disini disimulaikan setiap 1 file selesai akan menambah progress
25% dan setelah selesai dihitung total bytes yang di download dan mengeksekusi perintah
stopSelf() yang akan mematikan
Service.
Kalau bisa begini jadi ada Ide buat Aplikasi Lagu Anak. Tadinya mikir
kalau buat aplikasi lagu itu akan besar filenya dan ini akan membuat
User ragu untuk downlaodya, tapi dengan adanya proses seperti ini saya
bisa buat playernya saja lalu untuk file mp3nya didownload pada saat
user menjalankan aplikasi. Tapi jangan lupayah kalau semua file sudah di
download, ketika user membuka aplikasi kembali service tidak boleh
jalan lagi, untuk menangani ini bisa gunakan
Shared Preference. Masih ada lanjutan dari pengenalan Android Service ini, nantikan tutorial android service bagian 3.
sumber:
Beginning Android 4 Application Development – Wei Meng-Lee
http://agusharyanto.net/
Share this
EmoticonEmoticon