Cara kerja Services di Android

Hai, pada postingan kali ini kita akan membahas salah satu konsep penting di Android yaitu Services. Pembahasan dimulai dari apa itu services, bagaimana cara kerja services, dan mengimplementasikan services. Di Android, Services adalah komponen aplikasi yang berjalan dibelakang aplikasi, dan services ini tidak mendukung user interface dan juga tidak terikat pada lifecycle dari actifity di Android. Tapi penting untuk selalu mengontrol services ini, karena service berjalan di thread utama dari aplikasi, yang artinya jika semakin banyak service bekerja akan berpengaruh ke performa aplikasi.

Note : Tutorial ini masih dalam pengerjaan, jadi masih akan terus diupdate sampai kontennya memenuhi semua kebutuhan informasi tentang services di Android.

Gambaran dari penggunaan services itu seperti ini: Aplikasi kita tetap bekerja walaupun aplikasi tersebut tidak terlihat berjalan di depan layar,  contohnya download file, upload foto, dan juga memutar musik. Komponen aplikasi yang mengurusnya inilah yang dinamakan dengan services, tapi service tidak memiliki interface, dan juga menjalankan aplikasi berdasarkan prioritas dari aplikasi itu sendiri.

Untuk menggunakan services, kita perlu membuat atau menggunakan subclass dari services itu sendiri.

  • onStartCommand
  • onCreate
  • onBind
  • onDestroy

Misalnya kita mengirim notifikasi (contohnya: chatting) dari server ke aplikasi sebanyak 10 kali, nah berikut cara kerja Services-nya di Android:

Contoh implementasi services di Android

Penjelasan:

  1. Yang dilakukan Services pertama kali adalah menerima notifikasi pertama dan memulai menjalankan onCreate untuk servicesnya.
  2. Jika telah berhasil, maka notifikasi selanjutnya berjalan secara background task menggunakan onStarCommand.
  3. Sampai notifikasi didapatkan, dan ketika user berinteraksi dengan notifikasi tersebut, maka onBind yang dipanggil untuk memproses interaksi tersebut.
Contoh Services
Facebook Friend Request

Nah biar lebih jelas lagi, contoh gampang dari implementasi services yaitu pada aplikasi facebook. Dimana services akan terus berjalan secara background walaupun kita berinteraksi atau tidaknya saat adanya notifikasi friend request. Contoh interkasi langsung dengan services adalah saat kita accept friend request. Ada banyak aplikasi yang mengimplementasikan services ini, terutama aplikasi yang memiliki fitur notifikasi, chatting, dan sejenisnya.


 

Implementasi Services

Untuk mempermudah penjalasan alangkah baiknya jika mempraktekkannya langsung, karena tidak ada penjelasan lebih mudah selain mencobanya sendiri. Happy Dev ..

#1. New Project

Buat project baru dengan nama ContohServices. Setelah itu deklarasikan services di dalam file AndroidManifest.xml seperti berikut:

<!--Deklarasi Service di manifest -->
<service android:name=".HaiServices" android:exported="false"/>

 

#2. Class Baru

Buat class baru dengan nama HaiServices.java. Isikan code berikut kedalamnya:


package com.logbook.wira.contohservices;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
/**
* Created by wira on 1/13/16.
*/
public class HaiServices extends Service {
private static final String TAG = "HaiService";
private boolean isRunning = false;
@Override
public void onCreate() {
Toast.makeText(this, "Service telah dibuat", Toast.LENGTH_LONG).show();
isRunning = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service di jalankan", Toast.LENGTH_LONG).show();
//Membuat thread baru untuk servicenya
new Thread(new Runnable() {
@Override
public void run() {
//Isikan logika untuk service yang diinginkan
//Disini saya looping service 10x untuk mencontohkan notfikasi sebanyak 10 kali untuk 1000 milidetik
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
if(isRunning){
Log.i(TAG, "Service berjalan");
}
}
//Service di berhentikan ketika akhir looping
stopSelf();
}
}).start();
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
Log.i(TAG, "Service onBind");
return null;
}
@Override
public void onDestroy() {
isRunning = false;
Toast.makeText(this, "Service di Destroy", Toast.LENGTH_LONG).show();
Log.i(TAG, "Service berhenti");
}
}

 

#3. Create Button

Buat tampilan tombol yang berfungsi menjalankan services nantinya, dengan cara memperbarui file content_main.xml menjadi seperti berikut:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
xmlns:tools="http://schemas.android.com/tools&quot;
xmlns:app="http://schemas.android.com/apk/res-auto&quot; android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/start_service"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:text="@string/start_service" />
<Button
android:id="@+id/stop_Service"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/start_service"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:text="@string/stop_service" />
</RelativeLayout>

Agar tombol tersebut dapat digunakan buat fungsinya dengan cara menambahkan code dibawah ini pada file MainActivity.java di method onCreate.


//memulai service
findViewById(R.id.start_service).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, HaiServices.class);
startService(intent);
}
});
//service onDestroy
findViewById(R.id.stop_Service).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, HaiServices.class);
stopService(intent);
}
});

 

#4. Update string.xml

Tambahkan resource string pada file string.xml untuk keperluan button seperti dibawah ini:


<resources>
<string name="app_name">ContohServices</string>
<string name="action_settings">Settings</string>
<string name="start_service">Start Service</string>
<string name="stop_service">Stop Service</string>
</resources>

view raw

string.xml

hosted with ❤ by GitHub

Setelah semuanya selesai dan tidak ada error, coba jalankan aplikasi. Seharusnya akan terlihat seperti gambar dibawah ini:

Implementasi Services di Android
Implementasi Services di Android

Kita juga bisa memantau servicenya melalui logcat ketika aplikasi di jalankan:

Logcat Services di Android
Logcat Services di Android

Untuk sourcecode bisa dilihat Github ini.

Well mungkin cukup sekian pembahasan tentang services di Android, kalau ada tambahan/kritik silahkan komen di bawah ya guys.
Semoga bermanfaat..


Reference :

4 thoughts on “Cara kerja Services di Android

  1. service serendiri bisa di setting agar auto start gak ?
    misalnya saya buat di service nya pengecekan tanggal, jika day nya ganjil maka tampilkan notifikasi, dan service itu berjalan tanpa dilakukan Startservice ?

    Like

Good People write good comments ..