Saya mencari contoh sesuatu yang bisa dilakukan dengan IntentService
yang tidak bisa dilakukan dengan Service
(dan sebaliknya)?
Saya juga percaya bahwa IntentService
berjalan di utas yang berbeda dan Service
tidak. Jadi, sejauh yang saya bisa lihat, memulai layanan di dalam utasnya sendiri seperti memulai IntentService
. Apakah itu benar?
IntentService is used for short tasks (etc) and a service is for long ones
Dimana Anda membaca itu ?Jawaban:
Tejas Lagvankar menulis posting yang bagus tentang subjek ini. Berikut adalah beberapa perbedaan utama antara Layanan dan IntentService.
Kapan menggunakannya?
The Jasa dapat digunakan dalam tugas-tugas tanpa UI, tetapi tidak boleh terlalu lama. Jika Anda perlu melakukan tugas panjang, Anda harus menggunakan utas dalam Layanan.
The IntentService dapat digunakan dalam tugas-tugas yang panjang biasanya dengan tidak ada komunikasi ke Main Thread. Jika komunikasi diperlukan, dapat menggunakan pengendali Thread Utama atau maksud siar. Kasus penggunaan lainnya adalah ketika panggilan balik diperlukan (Intent memicu tugas).
Bagaimana cara memicu?
The Jasa dipicu oleh metode menelepon
startService()
.The IntentService ini dipicu menggunakan Intent, itu memunculkan sebuah thread pekerja baru dan metode
onHandleIntent()
disebut di thread ini.Dipicu Dari
Berjalan
The Jasa berjalan di latar belakang tetapi berjalan pada Main Thread aplikasi.
The IntentService berjalan pada thread pekerja terpisah.
Keterbatasan / Kerugian
The Jasa dapat menghalangi Utama Thread aplikasi.
The IntentService tidak dapat menjalankan tugas secara paralel. Karenanya, semua maksud berurutan akan masuk ke antrian pesan untuk utas pekerja dan akan dieksekusi secara berurutan.
Kapan harus berhenti?
Jika Anda menerapkan Layanan , Anda bertanggung jawab untuk menghentikan layanan ketika pekerjaannya selesai, dengan menelepon
stopSelf()
ataustopService()
. (Jika Anda hanya ingin memberikan penjilidan, Anda tidak perlu menerapkan metode ini).The IntentService berhenti layanan setelah semua permintaan awal yang telah ditangani, sehingga Anda tidak perlu panggilan
stopSelf()
.sumber
Menurut definisi, itu tidak mungkin.
IntentService
adalah subkelas dariService
, ditulis dalam Java. Karenanya, apa pun yangIntentService
dilakukan,Service
dapat dilakukan, dengan memasukkan bit kode yang relevan yangIntentService
digunakan.Tiga fitur utama dari
IntentService
adalah:utas latar belakang
antrian otomatis dari
Intent
s dikirim keonStartCommand()
, jadi jika seseorangIntent
sedang diproses olehonHandleIntent()
di latar belakang, perintah lain mengantri menunggu giliran merekashutdown otomatis
IntentService
, melalui panggilan kestopSelf()
, setelah antrian kosongApa saja dan semua itu dapat diimplementasikan oleh
Service
tanpa memperluasIntentService
.sumber
Service
dipanggil denganstartService
hanya dapat berjalan sekitar 10 detik sebelum melempar ANR -IntentService
dimulai dengan penyiaran niat tampaknya tidak memiliki batasan inionStartCommand()
aService
, dipanggil pada utas aplikasi utama. Anda tidak dapat mengikat utas ini selama lebih dari beberapa milidetik tanpa membekukan UI Anda, dan jika Anda mengambil banyak detik, Anda akan mendapatkan layanan yang setara dengan ANR.onStartCommand
alih-alihonHandleIntent
- sepertinyaonStartCommand
dijalankan di utas UI, namun utas terpisah muncul untukonHandleIntent
eksekusi.IntentService
memanggil itu sendiri, setelahonHandleIntent()
kembali, jika tidak ada lagi pekerjaan yang harus dilakukan.Layanan
startService()
Thread
Main Thread
stopSelf()
ataustopService()
IntentService
Handler
atauBroadcastReceiver
Intent
Main Thread
sumber
Jangan menemukan kembali roda
IntentService memperluas kelas Layanan yang jelas berarti yang
IntentService
sengaja dibuat untuk tujuan yang sama .Jadi apa tujuannya?
Tujuan `IntentService adalah untuk membuat pekerjaan kita lebih mudah untuk menjalankan tugas-tugas latar belakang tanpa khawatir
Pembuatan benang pekerja
Mengantri pemrosesan beberapa permintaan satu per satu (
Threading
)Service
Jadi TIDAK ,
Service
dapat melakukan tugas apa pun yangIntentService
akan dilakukan. Jika persyaratan Anda termasuk dalam kriteria yang disebutkan di atas, maka Anda tidak perlu menulis logika itu diService
kelas. Jadi jangan menemukan kembali roda karena ituIntentService
adalah roda yang diciptakan.Perbedaan utama
Kapan Anda menggunakan IntentService?
Ketika Anda ingin melakukan beberapa tugas latar belakang satu per satu yang ada di luar cakupan suatu Kegiatan maka
IntentService
sempurna.Bagaimana
IntentService
terbuat dariService
Layanan normal berjalan pada Thread UI (Setiap tipe Komponen Android berjalan pada thread UI secara default
Activity
, misalnyaBroadcastReceiver
,,ContentProvider
danService
). Jika Anda harus melakukan beberapa pekerjaan yang mungkin perlu waktu untuk diselesaikan, maka Anda harus membuat utas. Dalam hal banyak permintaan, Anda harus berurusan dengansynchronization
.IntentService
diberikan beberapa implementasi standar yang melakukan tugas-tugas itu untuk Anda.Menurut halaman pengembang
IntentService
menciptakan Worker ThreadIntentService
membuat Work Queue yang mengirimkan permintaan keonHandleIntent()
metode satu per satuIntentService
panggilstopSelf()
metodeonBind()
metode yang nolonStartCommand()
yang mengirimkanIntent
permintaan ke WorkQueue dan akhirnya keonHandleIntent()
sumber
Menambahkan poin ke jawaban yang diterima:
Lihat penggunaan IntentService dalam API Android. misalnya:
Untuk membuat komponen IntentService untuk aplikasi Anda, tentukan kelas yang memperluas IntentService, dan di dalamnya, tentukan metode yang mengesampingkan onHandleIntent ().
Juga, lihat kode sumber IntentService, konstruktor dan metode siklus hidupnya seperti padaStartCommand ...
dari panduan pengembang Android :
IntentService adalah kelas dasar untuk Layanan yang menangani permintaan asinkron (dinyatakan sebagai Maksud) berdasarkan permintaan. Klien mengirim permintaan melalui panggilan startService (Intent); layanan dimulai sesuai kebutuhan, menangani setiap Intent, pada gilirannya, menggunakan utas pekerja, dan berhenti sendiri ketika kehabisan pekerjaan.
: Pola "prosesor antrian kerja" ini biasanya digunakan untuk membongkar tugas dari utas utama aplikasi. Kelas IntentService ada untuk menyederhanakan pola ini dan merawat mekanik. Untuk menggunakannya, perluas IntentService dan terapkan onHandleIntent (Intent). IntentService akan menerima Intents, meluncurkan utas pekerja, dan menghentikan layanan yang sesuai.
Semua permintaan ditangani pada utas pekerja tunggal - mereka mungkin memakan waktu selama diperlukan (dan tidak akan memblokir loop utama aplikasi), tetapi hanya satu permintaan yang akan diproses pada satu waktu.
Kelas IntentService menyediakan struktur langsung untuk menjalankan operasi pada utas latar belakang tunggal. Ini memungkinkannya untuk menangani operasi yang telah berjalan lama tanpa memengaruhi respons antarmuka pengguna Anda. Selain itu, IntentService tidak terpengaruh oleh sebagian besar peristiwa siklus hidup antarmuka pengguna, sehingga ia terus berjalan dalam keadaan yang akan mematikan AsyncTask.
IntentService memiliki beberapa batasan:
Itu tidak dapat berinteraksi langsung dengan antarmuka pengguna Anda. Untuk menempatkan hasilnya di UI, Anda harus mengirimkannya ke Aktivitas. Permintaan pekerjaan berjalan berurutan. Jika operasi berjalan di IntentService, dan Anda mengirimnya permintaan lain, permintaan menunggu sampai operasi pertama selesai. Operasi yang berjalan pada IntentService tidak dapat diganggu. Namun, dalam banyak kasus
**
Ada perpustakaan bernama volley-library untuk mengembangkan aplikasi jaringan android . Kode sumber tersedia untuk umum di GitHub.
Dokumentasi resmi android untuk Praktik terbaik untuk pekerjaan Latar Belakang : membantu lebih memahami layanan maksud, utas, penangan, layanan. dan juga Melakukan Operasi Jaringan
sumber
Saya yakin Anda dapat menemukan daftar perbedaan yang luas hanya dengan googling sesuatu seperti 'Android IntentService vs Service'
Salah satu perbedaan yang lebih penting per contoh adalah bahwa IntentService berakhir dengan sendirinya begitu selesai.
Beberapa contoh (dibuat dengan cepat) dapat;
IntentService: Jika Anda ingin mengunduh banyak gambar di awal pembukaan aplikasi Anda. Ini adalah proses satu kali dan dapat membersihkan sendiri setelah semuanya diunduh.
Layanan: Layanan yang akan terus digunakan untuk berkomunikasi antara aplikasi Anda dan back-end dengan panggilan API web. Bahkan jika itu selesai dengan tugasnya saat ini, Anda masih menginginkannya sekitar beberapa menit kemudian, untuk komunikasi lebih lanjut.
sumber
IntentService
IntentService
berjalan di utasnya sendiri. Ini akan berhenti dengan sendirinya saat selesai. Lebih seperti api dan lupakan. Panggilan selanjutnya akan diantrikan. Bagus untuk mengantri panggilan. Anda juga dapat memutar beberapa utas di dalamIntentService
jika perlu - Anda dapat menggunakan iniThreadPoolExecutor
. Saya mengatakan ini karena banyak orang bertanya kepada saya "mengapa digunakanIntentService
karena tidak mendukung eksekusi paralel".IntentService
hanyalah sebuah utas. Anda dapat melakukan apa pun yang Anda butuhkan di dalamnya - Bahkan memutar banyak utas. Satu-satunya peringatan adalah bahwaIntentService
selesai segera setelah Anda memutar beberapa utas itu. Itu tidak menunggu utas-utas itu kembali. Anda harus mengurus ini. Jadi saya sarankan menggunakanThreadPoolExecutor
dalam skenario itu.Layanan
Secara default
Service
berjalan di utas utama. Anda perlu memutar utas pekerja untuk melakukan pekerjaan Anda. Anda harus berhentiservice
secara eksplisit. Saya menggunakannya untuk situasi ketika Anda perlu menjalankan hal-hal di latar belakang bahkan ketika Anda menjauh dari aplikasi Anda dan kembali lagi untuk yang Tanpa Kepalaservice
.Anda selalu dapat berkomunikasi kembali ke aktivitas Anda menggunakan
BroadcastReceivers
jika perlu.sumber
IntentService adalah perpanjangan Layanan yang dibuat untuk memudahkan pelaksanaan tugas yang perlu dieksekusi di latar belakang dan di utas terpisah.
IntentService dimulai, buat utas dan jalankan tugasnya di utas. Setelah selesai, itu membersihkan segalanya. Hanya satu instance dari IntentService yang dapat berjalan pada saat yang sama, beberapa panggilan enqueued.
Sangat mudah digunakan dan sangat nyaman untuk banyak penggunaan, misalnya mengunduh barang. Tetapi memiliki keterbatasan yang bisa membuat Anda ingin menggunakan Layanan yang lebih mendasar (tidak sederhana).
Misalnya, layanan yang terhubung ke server xmpp dan terikat oleh aktivitas tidak dapat dilakukan dengan menggunakan IntentService. Anda pada akhirnya akan mengabaikan atau mengganti barang IntentService.
sumber
IntentService
tidak dapat digunakan untuk Mendengarkan Waktu Lama, Seperti untuk Pendengar XMPP, ini adalah operator waktu tunggal, melakukan pekerjaan dan melambaikan tangan.Itu juga hanya memiliki satu threadworker, tetapi dengan sebuah trik, Anda dapat menggunakannya sebagai tidak terbatas.
sumber
Perbedaan utama antara a
Service
dan anIntentService
dijelaskan sebagai berikut:Layanan:
1.A
Service
secara default, berjalan di utas utama aplikasi. (Di sini tidak ada utas pekerja default tersedia). Jadi pengguna perlu membuat utas terpisah dan melakukan pekerjaan yang diperlukan dalam utas itu.2.Memungkinkan Banyak permintaan sekaligus. (Multi Threading)
IntentService:
1. Sekarang, datang ke
IntentService
, di sini utas pekerja default tersedia untuk melakukan operasi apa pun. Perhatikan bahwa - Anda perlu menerapkanonHandleIntent()
metode, yang menerima maksud untuk setiap permintaan awal, di mana Anda dapat melakukan pekerjaan latar belakang.2.Tapi hanya memungkinkan satu permintaan pada satu waktu.
sumber
Android IntentService vs Layanan
1. Layanan
2. IntentService
Rujuk dari Sini
sumber