Apakah ada alasan lain bahwa Intent yang diteruskan onStartCommand(Intent, int, int)
adalah NULL selain sistem yang memulai ulang layanan melalui tanda seperti START_STICKY
?
Juga, ketika layanan di-restart oleh sistem, Intent.getAction()
metode mengembalikan NULL ... kadang-kadang. Maksudnya bukan hanya NULLgetAction()
Saya bertanya di sini juga tetapi belum menerima jawaban.
PEMBARUAN : Setelah mengobrol dengan Mark Murphy, dia menyarankan agar saya kembali START_REDELIVER_INTENT
dalam onStartCommand()
panggilan balik dalam layanan saya alih-alih START_STICKY
sehingga seluruh maksud dikirim setelah restart.
Saya tidak melakukan ini pada awalnya karena saya khawatir jika layanan mencoba melakukan sesuatu, lalu di tengah-tengah itu sesuatu layanan dimulai ulang ... akankah ia mengenali bahwa ia mulai melakukan sesuatu itu? Saya rasa itu logika yang harus saya tanggung :)
intent
adalahnull
padaonStartCommand()
, hal itu disebabkan oleh beberapa kesalahan lain yang terlihat di LogCat sebelum ini. Saya tidak tahu mengapa, tapi inilah yang saya amati dan cukup mudah untuk mengabaikannya.NullPointerException
di suatu tempat di salah satu Aktivitas. Kemudian terjadi kesalahan lainnya. Tetapi dalam kedua kasus jejak stack saya menunjukkan bahwa layanan saya - yang berjalan saat kesalahan ini terjadi - memilikiintent
yangnull
seperti dalam kasus Anda. Saya berpikir cukup lama apa yang salah, ketika saya memutuskan untuk menggulir jejak tumpukan dan ternyata di suatu tempat di atas saya memiliki kesalahan saya yang sebenarnya. Setelah menyelesaikan yang satu ini, juga yangnull
intent
menghilang.Jawaban:
Saya terkejut tidak ada diskusi tentang bendera yang masuk. Saya akan memantau ini di log dengan yang berikut:
Pembaruan: Bendera 0 jadi tidak ada yang bisa ditindaklanjuti di sana. Saya telah meninggalkan cek nol di sana tanpa kehilangan fungsi.
Sunting: Oke, saya menemukannya di dokumentasi START_STICKY di semua tempat! "jika tidak ada perintah start yang tertunda untuk dikirim ke layanan, itu akan dipanggil dengan objek maksud null, jadi Anda harus berhati-hati untuk memeriksanya."
http://developer.android.com/reference/android/app/Service.html
sumber
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. Bekerja untuk saya. Tapi tentu saja Anda perlu menangani maksud null dengan benar.But then of course you need to correctly handle null intent
; Maksud kamu apa?! Bagaimana? Terima kasih.onStartCommand(intent: Intent?, ...)
harus berfungsi. Dan kemudian jangan lakukanintent!!
tetapi periksa dengan benar apakah maksudnya null.