Saya membaca beberapa artikel dan keduanya tampaknya melakukan hal yang sama dan saya bertanya-tanya apa perbedaan antara memulai layanan seperti itu:
Intent intent = new Intent(this, HelloService.class);
startService(intent);
atau seperti itu:
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
Saat saya membaca, keduanya melakukan hal yang sama, jika dalam layanan Anda mengembalikan parameter START_STICKY;
android
android-service
pengguna3629316
sumber
sumber
Jawaban:
Maksud
Android Intent adalah objek yang membawa maksud, yaitu pesan dari satu komponen ke komponen lain baik di dalam atau di luar aplikasi. Maksud dapat mengkomunikasikan pesan di antara salah satu dari tiga komponen inti aplikasi - Aktivitas, Layanan, dan BroadcastReceivers.
Maksud itu sendiri, objek Intent, adalah struktur data pasif. Ini memegang deskripsi abstrak dari operasi yang akan dilakukan.
Misalnya: Anda memiliki Aktivitas yang perlu meluncurkan klien email dan mengirim email. Untuk melakukan ini, Aktivitas Anda akan mengirimkan Intent dengan tindakan
ACTION_SEND
, bersama dengan pemilih yang sesuai, ke Android Intent Resolver:Pemilih yang ditentukan memberikan antarmuka yang tepat bagi pengguna untuk memilih cara mengirim data email Anda.
MAKSUD EKSPLISIT
MAKSUD IMPLISIT
Maksud Tertunda
PendingIntent adalah token yang Anda berikan ke aplikasi asing (mis. NotificationManager, AlarmManager, Home Screen AppWidgetManager, atau aplikasi pihak ketiga lainnya), yang memungkinkan aplikasi asing untuk menggunakan izin aplikasi Anda untuk mengeksekusi potongan kode yang telah ditentukan.
Contoh untuk Pending Intent: http://android-pending-intent.blogspot.in/
Sumber: Maksud Android dan Maksud Tertunda Android
Semoga ini membantu.
sumber
PendingIntent
adalah pembungkusIntent
. Aplikasi asing yang menerimaPendingIntent
, tidak tahu kontenIntent
yang dibungkusnyaPendingIntent
. Misi aplikasi asing adalah mengirimkan kembali maksud ke pemilik ketika beberapa kondisi terpenuhi (Misalnya: alarm dengan jadwal, atau pemberitahuan dengan klik ...). Ketentuan diberikan oleh pemilik tetapi diproses oleh aplikasi asing (Misalnya: alarm, notifikasi).Jika aplikasi asing mengirimkan maksud ke aplikasi Anda, berarti aplikasi asing tersebut tahu tentang konten maksud tersebut. dan aplikasi asing membuat keputusan untuk mengirim maksud maka aplikasi Anda harus memproses maksud untuk memenuhi beberapa kondisi => aplikasi Anda mendapatkan sumber daya kinerja sistem.
sumber
Perbedaan sederhana lainnya:
Niat normal akan segera mati setelah aplikasi dimatikan.
Niat yang menunggu keputusan tidak pernah mati. Mereka akan hidup selama dibutuhkan oleh layanan alarm, layanan lokasi, atau layanan lainnya.
sumber
Memulai layanan secara teratur melalui AlarmManager
Seperti halnya aktivitas, sistem Android dapat menghentikan proses layanan kapan saja untuk menghemat sumber daya. Karena alasan ini, Anda tidak bisa begitu saja menggunakan a
TimerTask
dalam layanan untuk memastikan bahwa itu dijalankan secara teratur.Jadi, untuk penjadwalan Layanan yang benar gunakan
AlarmManager
kelas.MEMPERBARUI:
Jadi sebenarnya tidak ada perbedaan antara keduanya. Tetapi tergantung pada apakah Anda ingin memastikan pelaksanaan layanan atau tidak, Anda dapat memutuskan apa yang akan digunakan karena untuk yang pertama tidak ada jaminan dan untuk yang selanjutnya .
Info selengkapnya di AndroidServices .
sumber
getApplicationContext()
atau menggunakannya saat Anda benar-benar menginginkannya, cukup baca - kapan-untuk-memanggil-aktivitas-konteks-atau-konteks aplikasi ( stackoverflow.com/questions/7298731/… ).Secara fungsional tidak ada perbedaan.
Arti dari PendingIntent adalah, Anda bisa menanganinya ke aplikasi lain yang nantinya bisa menggunakannya seolah-olah aplikasi lain itu sendiri. Berikut penjelasan terkait dari dokumentasi :
Jadi PendingIntent hanyalah referensi ke data yang mewakili Intent asli (yang digunakan untuk membuat PendingIntent).
sumber