Komponen Android Service
Service adalah komponen yang berjalan di latar belakang untuk melakukan proses tertentu tanpa perlu berinteraksi dengan pengguna. Misalnya, service mungkin memainkan musik di latar belakang saat pengguna berada dalam aplikasi yang berbeda, atau mungkin mengambil data melalui jaringan tanpa menghalangi interaksi pengguna dengan activity. Sebuah service pada dasarnya dapat mengambil dua pilihan:
PILIHAN | KETERANGAN |
---|---|
Started | Sebuah Service Started ketika komponen aplikasi, seperti activity, mulai dengan memanggil startService (). Begitu dimulai, service dapat berjalan di latar belakang tanpa batas, bahkan jika komponen yang mulai hancur. |
Bound | Sebuah Service Bound ketika komponen aplikasi mengikat dengan callingbindService (). Service Bound menawarkan antarmuka client-server yang memungkinkan komponen untuk berinteraksi dengan service, mengirim permintaan, mendapatkan hasil, dan bahkan melakukannya di proses dengan komunikasi interprocess (IPC). |
Sebuah service memiliki metode siklus hidup callback yang dapat Anda terapkan untuk memantau perubahan di bagian Service dan Anda dapat melakukan pekerjaan pada tahap yang sesuai. Diagram di sebelah kiri menunjukkan siklus hidup saat dibuat dengan startService () dan diagram di sebelah kanan menunjukkan siklus hidup saat dibuat dengan bindService (): (image courtesy: android.com)
Untuk membuat service, Anda membuat kelas Java yang extends ke dasar kelas service atau salah satu subclass yang ada. Kelas dasar service mendefinisikan berbagai metode callback dan yang paling penting diberikan di bawah ini. Anda tidak perlu untuk mengimplementasikan semua metode callback. Namun, penting bahwa Anda memahami masing-masing dan menerapkan mereka yang memastikan aplikasi Anda berperilaku dengan cara pengguna harapkan.
CALLBACK | KETERANGAN |
---|---|
onStartCommand() | Sistem panggilan metode ini ketika komponen lain, seperti activity, meminta agar service dimulai, dengan memanggil startService (). Jika Anda menerapkan metode ini, adalah tanggung jawab Anda untuk menghentikan service ketika pekerjaannya dilakukan, dengan memanggil stopSelf () atau stopService () metode. |
onBind() | Sistem panggilan metode ini ketika komponen lain ingin mengikat dengan service dengan memanggil bindService (). Jika Anda menerapkan metode ini, Anda harus menyediakan antarmuka yang klien gunakan untuk berkomunikasi dengan service, dengan kembali objek anIBinder. Anda harus selalu menerapkan metode ini, tetapi jika Anda tidak ingin mengizinkan mengikat, maka Anda harus kembali null. |
onUnbind() | Sistem panggilan metode ini ketika semua klien telah terputus dari interface tertentu yang diterbitkan oleh service. |
onRebind() | Sistem panggilan metode ini ketika klien baru telah tersambung ke service, setelah sebelumnya telah diberitahu bahwa semua telah terputus di itsonUnbind (Intent). |
onCreate() | Sistem panggilan metode ini ketika service ini pertama kali diciptakan usingonStartCommand () atau onBind (). Panggilan ini diperlukan untuk melakukan setup satu kali. |
onDestroy() | Sistem panggilan metode ini ketika service tidak lagi digunakan dan sedang hancur. service Anda harus menerapkan ini untuk membersihkan sumber daya seperti thread, registered listeners,receiver, dll |
Berikut kerangka service menunjukkan masing-masing metode siklus hidup:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| package com.tutorialspoint; import android.app.Service; import android.os.IBinder; import android.content.Intent; import android.os.Bundle; public class HelloService extends Service { /** indicates how to behave if the service is killed */ int mStartMode; /** interface for clients that bind */ IBinder mBinder; /** indicates whether onRebind should be used */ boolean mAllowRebind; /** Called when the service is being created. */ @Override public void onCreate() { } /** The service is starting, due to a call to startService() */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return mStartMode; } /** A client is binding to the service with bindService() */ @Override public IBinder onBind(Intent intent) { return mBinder; } /** Called when all clients have unbound with unbindService() */ @Override public boolean onUnbind(Intent intent) { return mAllowRebind; } /** Called when a client is binding to the service with bindService()*/ @Override public void onRebind(Intent intent) { } /** Called when The service is no longer used and is being destroyed */ @Override public void onDestroy() { } } |
Contoh
Contoh ini akan membawa Anda melalui langkah-langkah sederhana untuk menunjukkan bagaimana untuk membuat service Android Anda sendiri. Ikuti langkah-langkah berikut untuk memodifikasi aplikasi Android yang kami ciptakan di Hello World Contoh bab:
STEP | KETERANGAN |
---|---|
1 | Anda akan menggunakan Eclipse IDE untuk membuat aplikasi Android dengan nama HelloWorld di bawah paket com.example.helloworld . |
2 | Memodifikasi file activity utama MainActivity.java untuk menambahkan startService () dan stopService () metode. |
3 | Buat file java MyService.java baru di bawah paket com.example.helloworld. File ini akan memiliki penerapan metode service terkait Android. |
4 | Tentukan service Anda di AndroidManifest.xml file menggunakan tag. Sebuah aplikasi dapat memiliki satu atau lebih service tanpa batasan. |
5 | Memodifikasi konten detault res file res/layout/activity_main.xml untuk menyertakan dua tombol di tata letak linear. |
6 | Mendefinisikan dua konstanta start_service dan stop_service di res/values/strings.xml |
7 | Jalankan aplikasi untuk meluncurkan Android emulator dan memverifikasi hasil dari perubahan yang dilakukan di aplikasi tersebut. |
Berikut ini adalah isi dari file activity utama src/com.example.helloworld/MainActivity.java dimodifikasi. File ini dapat mencakup setiap metode siklus hidup yang mendasar. Kami telah menambahkan startService () dan stopService () metode untuk memulai dan menghentikan service.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.content.Intent; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } // Method to start the service public void startService(View view) { startService(new Intent(getBaseContext(), MyService.class)); } // Method to stop the service public void stopService(View view) { stopService(new Intent(getBaseContext(), MyService.class)); } } |
Berikut adalah isi dari src/com.example.helloworld/MyService.java. File ini dapat memiliki implementasi dari satu atau lebih metode yang berhubungan dengan service berdasarkan kebutuhan. Untuk saat ini kita akan menerapkan dua metode onStartCommand () dan onDestroy ():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| package com.example.helloworld; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class MyService extends Service { @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Let it continue running until it is stopped. Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); } } |
Berikut akan isi modifikasi dari berkas AndroidManifest.xml . Di sini kami telah menambahkan tag untuk menyertakan service kami:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <service android:name=".MyService" /> </application> </manifest> |
Berikut ini akan menjadi isi dari res file res/layout/activity_main.xml untuk menyertakan dua tombol:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btnStartService" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/start_service" android:onClick="startService"/> <Button android:id="@+id/btnStopService" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/stop_service" android:onClick="stopService" /> </LinearLayout> |
Berikut ini akan menjadi isi dari res/values/strings.xml untuk mendefinisikan dua konstanta baru:
1
2
3
4
5
6
7
8
9
10
| resources> <string name="app_name">HelloWorld</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">MainActivity</string> <string name="start_service">Start Service</string> <string name="stop_service">Stop Service</string> </resources> |
Mari kita mencoba untuk menjalankan Hello kami dimodifikasi Dunia! Aplikasi kita hanya dimodifikasi. Saya berasumsi bahwa Anda telah menciptakan AVD Anda saat melakukan pengaturan lingkungan. Untuk menjalankan aplikasi dari Eclipse, buka salah satu file kegiatan proyek Anda dan klik Run Run Eclipse Icon dari toolbar. Eclipse menginstal aplikasi pada AVD Anda dan mulai dan jika semuanya baik-baik saja dengan setup dan aplikasi, maka akan muncul jendela berikut Emulator:
Sekarang untuk memulai service Anda, mari kita klik pada tombol service Start, ini akan memulai service dan sesuai program kami di onStartCommand () metode, service pesan Started akan muncul di bagian bawah simulator sebagai berikut:
Untuk menghentikan service, Anda dapat mengklik tombol Stop Service.
Komentar
Posting Komentar