2017-08-30 22 views
5

here tanımlandığı gibi her zamanki sınıf WakefulBroadcastReceiver kullanımdan kaldırılmıştır.android.app.job.JobScheduler yerine WakefulBroadcastReceiver kullanımı

Şimdi, bu, önceki SDK sürümleri gibi zamanlanmış görevler oluşturmak mümkün değil. Google I

https://developer.android.com/reference/android/app/job/JobScheduler.html

Ama nasıl kullanmak zorunda diyor?

Peki, günümüzde arka plan planlanan görevler için en kullanışlı çözüm hangisidir?

AlarmManager artık daha kullanışlı değil mi?

Uygulamam günde birkaç kez uyanıyor ve bildirimleri AlarmManager'ı kullanarak güncelleştiriyor. Ne değişmem gerektiğinden emin değilim. Ne yapmam gerekiyor? Eski API ve yeni bir tane mi? Ya da sadece güncel çözüm?

cevap

4

şimdi bu önceki SDK

WakefulBroadcastReceiver Bunun tek seçenek olmamıştı serbest bırakır için böyle bir zamanlanmış görevler oluşturmak mümkün değildir. Örneğin, benim WakefulIntentService, 2009'a dayanır. Ve her ikisi de destek kitaplığı için the JobIntentService eklenmiştir.

Ama nasıl?

Aa, JobSchedulerthe JavaDocs ve elsewhere in the documentation yanı sıra Android uygulaması geliştirme kitap ve derslerinde kaplıdır.

Günümüzde arka plan planlanan görevler için en kullanışlı çözüm hangisidir? Bu, "yararlı" nı nasıl tanımlayacağınıza bağlı olduğundan ve tanımınızı bilmiyorum.

Genel anlamda:

  • kullanın JobScheduler Bir çalar saat uygulaması

  • Kullanım geriye dönük uyumluluk için AlarmManager diğer set...() yöntemleri yazıyoruz eğer nereye Kullanım setAlarmClock()

  • mümkün AlarmManager üzerinde Android 5.0 öncesi cihazlar için, belki bir sarmalayıcı kütüphanesi aracılığıyla (ör., Evernote'un android-job)

  • Kullanım itme mesajlaşma (örneğin FKM) nerede pratik ve yerinde misin eğer itme mesajlaşma çözümü

bağımlı olmak AlarmManager yararlı artık değil mi?

periyodik arka plan çalışmalarının herhangi çeşit "yararlı" bazı tanımları için "artık yararlı" olduğunu yapmak. Android 6.0'da tanıtılan Doze modu ve uygulama bekleme süresi temel olarak kullanıcının bakış açısından güvenilir olmayan periyodik arka plan çalışmasını sağlar.

Neyi uygulamak zorundayım? Eski API ve yeni bir tane mi? Ya da sadece güncel çözüm? Özet Bu konuya cevap vermek imkansızdır. Android 8.0'da veya destek kitaplığınızda, AlarmManager'u kullandığınız gibi kullanmanızı engelleyen hiçbir şey yoktur.

+0

AIRPLANE_MODE değişikliklerini dinlemek ve arka planda çalışırken bile bazı üçüncü taraf SDK'sında arka planda çalışan bazı özellikleri devre dışı bırakmak için WakefulBroadcastReceiver kullanmalıyım. Uygulamam arka planda olduğunda AIRPLANE_MODE değişikliğini dinlemek için Jobscheduler'ı nasıl kullanacağım konusunda kafam karıştı. –

+1

@srv_sud: Bu yayın eylemi, [örtük yayıncı beyaz liste] (https://developer.android.com/guide/components/broadcast-exceptions.html) üzerinde görünmüyor, dolayısıyla Android 8.0 ve üzeri sürümlerde çalışmayabilir. Bunun da ötesinde, endişelerinizle ilgili ayrı bir Yığın Taşması sorusu sormanızı tavsiye ederim. – CommonsWare

+0

@CommonsWare, gerçekten, internette "WakefulBroadcastReceiver yerine Jobscheduler'ı nasıl kullanacağınız" ile ilgili uyarılar yakalamak için eğitici bulunmamaktadır. Uyandırıcı tarafından başlatılan JobScheduler aracılığıyla Servis'in nasıl değiştirileceğine dair birçok örnek var ama aynı değil. –