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:
Penjelasan:
- Yang dilakukan Services pertama kali adalah menerima notifikasi pertama dan memulai menjalankan
onCreate
untuk servicesnya. - Jika telah berhasil, maka notifikasi selanjutnya berjalan secara background task menggunakan
onStarCommand
. - Sampai notifikasi didapatkan, dan ketika user berinteraksi dengan notifikasi tersebut, maka
onBind
yang dipanggil untuk memproses interaksi tersebut.
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
xmlns:app="http://schemas.android.com/apk/res-auto" 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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
Setelah semuanya selesai dan tidak ada error, coba jalankan aplikasi. Seharusnya akan terlihat seperti gambar dibawah ini:
Kita juga bisa memantau servicenya melalui logcat ketika aplikasi di jalankan:
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..
jdi paham sekarang
LikeLike
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 ?
LikeLike
hatur nuhun 😀
LikeLike
Entah ya…
udah saya set START_STICKY tp pas app saya swap, servicenya jadi ilang juga.
LikeLike