Apa perbedaan antara START_STICKY
dan START_NOT_STICKY
saat mengimplementasikan layanan di android? Adakah yang bisa menunjukkan beberapa contoh standar ..?
sumber
Apa perbedaan antara START_STICKY
dan START_NOT_STICKY
saat mengimplementasikan layanan di android? Adakah yang bisa menunjukkan beberapa contoh standar ..?
Kedua kode hanya relevan ketika ponsel kehabisan memori dan membunuh layanan sebelum selesai dijalankan. START_STICKY
memberitahu OS untuk membuat ulang layanan setelah memiliki memori yang cukup dan menelepon onStartCommand()
lagi dengan niat nol. START_NOT_STICKY
memberitahu OS untuk tidak repot menciptakan layanan lagi. Ada juga kode ketiga START_REDELIVER_INTENT
yang memberitahu OS untuk membuat ulang layanan dan mengembalikan maksud yang sama onStartCommand()
.
Artikel oleh Dianne Hackborn ini menjelaskan latar belakang ini jauh lebih baik daripada dokumentasi resmi.
Sumber: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
Bagian kuncinya di sini adalah kode hasil baru yang dikembalikan oleh fungsi, memberi tahu sistem apa yang harus dilakukan dengan layanan jika prosesnya mati saat sedang berjalan:
START_STICKY pada dasarnya sama dengan perilaku sebelumnya, di mana layanan dibiarkan "dimulai" dan nanti akan dimulai ulang oleh sistem. Satu-satunya perbedaan dari versi platform sebelumnya adalah bahwa jika ia di-restart karena prosesnya mati, onStartCommand () akan dipanggil pada instance layanan selanjutnya dengan null Intent bukannya tidak dipanggil sama sekali. Layanan yang menggunakan mode ini harus selalu memeriksa kasus ini dan menanganinya dengan tepat.
START_NOT_STICKY mengatakan bahwa, setelah kembali dari onStartCreated (), jika proses tersebut dimatikan tanpa ada sisa perintah mulai untuk disampaikan, maka layanan akan dihentikan alih-alih dimulai kembali. Ini jauh lebih masuk akal untuk layanan yang dimaksudkan hanya berjalan saat mengeksekusi perintah yang dikirim kepada mereka. Sebagai contoh, suatu layanan dapat dimulai setiap 15 menit dari alarm ke jajak pendapat beberapa negara jaringan. Jika terbunuh saat melakukan pekerjaan itu, yang terbaik adalah membiarkannya dihentikan dan memulai saat alarm berbunyi.
START_REDELIVER_INTENT seperti START_NOT_STICKY, kecuali jika proses layanannya dimatikan sebelum ia memanggil stopSelf () untuk maksud tertentu, niat itu akan dikirim kembali sampai selesai (kecuali setelah beberapa kali coba lagi masih tidak dapat menyelesaikan, pada titik mana sistem menyerah). Ini berguna untuk layanan yang menerima perintah pekerjaan untuk dilakukan, dan ingin memastikan bahwa mereka akhirnya menyelesaikan pekerjaan untuk setiap perintah yang dikirim.
START_NOT_STICKY
?START_REDELIVER_INTENT
sepertiSTART_NOT_STICKY
. Sebaliknya itu sepertiSTART_STICKY
KISS answer
Perbedaan:
START_STICKY
sistem akan mencoba membuat kembali layanan Anda setelah layanannya mati
START_NOT_STICKY
sistem tidak akan mencoba membuat kembali layanan Anda setelah terbunuh
Contoh standar:
sumber
START_REDELIVER_INTENT
. Saya baru saja mengujiSTART_STICKY
dan mematikan aplikasi dengan aplikasi terbaru. Kemudian ingat layanan. TetapiSTART_REDELIVER_INTENT
tidak pernah menelepon lagi. Mengapa?Dokumentasi untuk
START_STICKY
danSTART_NOT_STICKY
cukup mudah.START_STICKY:
Contoh: Contoh Layanan Lokal
START_NOT_STICKY:
Contoh: ServiceStartArguments.java
sumber