Masih ingatkan beberapa waktu lalu kita membahas tentang Service pada Android. Pada kesempatan kali ini kita lanjutkan kembali pelajaran tentang Service pada Android. Pada bagian ke 3 ini kita akan bahas tentang menjalankan service secara berulang berdsarkan periode waktu yang telah ditetapkan.
Untuk itu mari kita ikuti langkah-langkahnya.
1. Buka kembali project pada tutorial sebelumnya kemudian Edit kembali class TheService, lalu ketikan kode berikut.
package net.agusharyanto.learnservice; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Timer; import java.util.TimerTask; import android.app.Service; import android.content.Intent; import android.os.AsyncTask; import android.os.IBinder; import android.util.Log; import android.widget.Toast; public class TheService extends Service { int counter = 0; static final int UPDATE_INTERVAL = 5000; private Timer timer = new Timer(); @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // We want this service to continue running until it is explicitly // stopped, so return sticky. // Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); doSomethingRepeatedly(); /* * try { new DoBackgroundTask().execute(new URL( * "http://agusharyanto.net/android/dl/sylabus1.pdf"), new * URL("http://agusharyanto.net/android/dl/sylabus2.pdf"), new * URL("http://agusharyanto.net/android/dl/sylabus3.pdf"), new * URL("http://agusharyanto.net/android/dl/hadiah.pdf")); } catch * (MalformedURLException e) { // TODO Auto-generated catch block * e.printStackTrace(); } */ return START_STICKY; } private void doSomethingRepeatedly() { timer.scheduleAtFixedRate(new TimerTask() { public void run() { Log.d("TheService Cek Data", String.valueOf(++counter)); } }, 0, UPDATE_INTERVAL); } private int DownloadFile(URL url) { int file_size = 0; try { // ---simulate taking some time to download a file--- URLConnection urlConnection = url.openConnection(); urlConnection.connect(); file_size = urlConnection.getContentLength(); } catch (IOException e) { e.printStackTrace(); } // ---return an arbitrary number representing // the size of the file downloaded--- return file_size; } private class DoBackgroundTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) { int count = urls.length; long totalBytesDownloaded = 0; for (int i = 0; i < count; i++) { totalBytesDownloaded += DownloadFile(urls[i]); // ---calculate percentage downloaded and // report its progress--- publishProgress((int) (((i + 1) / (float) count) * 100)); } return totalBytesDownloaded; } protected void onProgressUpdate(Integer... progress) { Log.d("Downloading files", String.valueOf(progress[0]) + "% downloaded"); Toast.makeText(getBaseContext(), String.valueOf(progress[0]) + "% downloaded", Toast.LENGTH_LONG).show(); } protected void onPostExecute(Long result) { Toast.makeText(getBaseContext(), "Downloaded " + result + " bytes", Toast.LENGTH_LONG).show(); stopSelf(); } } @Override public void onDestroy() { super.onDestroy(); if (timer != null) { timer.cancel(); } Toast.makeText(this, "The Service Destroyed", Toast.LENGTH_LONG).show(); } }
Pada code diatas untuk menjadwalkan Service mengerjakan sesuatu pekerjaan secara berkala kita menggunakan timer denan UP_DATE_INTERVAL sebagai jarak perulanganya. Kuncinya ada pada method doSomethingRepeatedly yang diekseskusi pada saat service distart. Dalam method tersebut dijadwalkan setiap 5000ms (5 detik) akan mencetak “The Service Cek Data n” pada LogCat.
2. Kita Run Kembali Projectnya, lalu klik Start Service, Kemudian perhatikan Log Catnya.
- Service akan terus menulis “The Service Cek Data n” Setiap 5 detik sampai Service distop.
Wah service memang dahsyatyah, kalau gitu bisa dong kita pakai untuk aplikasi chat, jadi konsepnya secara berkala aplikasi cek ke server apakah ada chat untuk user tersebut atau tidak ?. Tentu bisa, untuk teknik seperti ini yang digunakan adalah teknik pull wah bikin aplikasi ada tekniknya juga kayak olah raga saja. Kalau user masih sedikit teknik PULL ini bolehlah jadi pilihan tapi kalau usernya sudah ratusan atau ribuan pertimbangkanlah untuk menggunkan teknik PUSH
Semoga Bermanfaat
Salam Hangat
Agus Haryanto
Pembicara Seminar IT
Mobile and Web Application Developer
sangat bermanfaat….
thanks mas agus…. 🙂
lumayan buat senam otak
tq mas tutorialnya.
mas agus blh saya minta contoh source code untuk aplikasi yang menggunakan metode PUSH, saya sangat membutuhkan metode tersebut untuk suatu pekerjaan mas
mohon bantuannya by email jg bisa
terimakasih