Hizmetimin "kilitlendikten" sonra otomatik olarak ActivityManager tarafından yeniden başlatılmasını engellemenin bir yolu var mı? Bazı senaryolarda, hizmet program çıkışında zorla öldürüyorum, ancak Android'in yeniden başlatılmasını istemiyorum.Android: Hizmetin çökme sonrasında yeniden başlatılması nasıl önlenir?
cevap
Hizmetiniz SharedPreferences'a bir değer kaydedebilir. Örneğin, hizmetiniz her başladığında böyle bir şey depolayabilirsiniz: mağaza ("serviceStarted", 1);
Hizmetiniz düzenli olarak sona erdiğinde (bunu yapmak için bir ileti gönderirseniz) bu değeri geçersiz kılarsınız: store ("serviceStarted", 0);
Hizmetiniz bir dahaki sefer yeniden başladığında, serviceStarted değerinin "1" olduğunu algılar - bu, hizmetinizin düzenli olarak durdurulduğu ve kendini yeniden başlattığı anlamına gelir. Bunu tespit ettiğinizde servisiniz arayabilir: stopSelf(); kendini iptal etmek. Daha fazla bilgi için
: Bu davranış sizin Service
uygulanmasında onStartCommand()
dönüş değeri ile tanımlanır http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle
. Sabit START_NOT_STICKY
, işlem "öldürüldüğünde" çalışıyorsa Android'in hizmeti yeniden başlatmamasını söyler. Başka bir deyişle:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We don't want this service to continue running if it is explicitly
// stopped, so return not sticky.
return START_NOT_STICKY;
}
HTH
Kabul edilen çözüm olarak işaretlenmemiş olsa da, bu doğru yanıttır – scooterman
Olağanüstü amaçlar varsa işe yaramaz. Bu problemim var ve yukarıdaki yaklaşım işe yaramıyor. Aşağıdaki yaklaşım belki daha iyi bir alternatif olabilir ama henüz uygulamaya koymadım. Yığın taşmasında önerilen diğer yaklaşımları denediniz, ancak henüz başaramadılar. –
@BrianReinhold, bu soruda belirli bir dönüşe sahip gibi görünüyor, kullanım durumunuzu ve gözlemlediğiniz sorunları açıkladığınızdan birini yayınladınız mı? Daha çok ilgilenmek isterim. – Devunwired
Burada başkası yardımcı olabilecek Ben durumda ile geldi çözüm. Uygulamam hala START_NOT_STICKY
ile yeniden başlatıldı. Bunun yerine, hizmetin sistem tarafından yeniden başlatıldığı anlamına gelen null
amacını kontrol ediyorum.
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
// Ideally, this method would simply return START_NOT_STICKY and the service wouldn't be
// restarted automatically. Unfortunately, this seems to not be the case as the log is filled
// with messages from BluetoothCommunicator and MainService after a crash when this method
// returns START_NOT_STICKY. The following does seem to work.
Log.v(LOG_TAG, "onStartCommand()");
if (intent == null) {
Log.w(LOG_TAG, "Service was stopped and automatically restarted by the system. Stopping self now.");
stopSelf();
}
return START_STICKY;
}
Teşekkürler !. Sık sık konum güncellemeleri alma ve sunucudan hizmete gönderme zorunluluğum vardı. bildirime dayalı ön plan hizmeti, ancak uygulama kapatıldığında yer güncellemelerini almayı durdurdu, 2 gün süren mücadeleden sonra, cevabınıza ulaştım ve kodunuzu değiştirdim. 'StopSelf()' den önce, aynı servisin yeniden başlatılmasını "AlarmManager" ile şimdilik 10sec gecikme.Ve, bu çok iyi çalıştı, şimdi sürekli servisten konum güncellemeleri almak. Çok teşekkürler! – manoj
- 1. Etkinlik etkinleştirildikten sonra hizmetin yeniden başlatılması nasıl engellenir Görev değiştiriciden?
- 2. Zaten çalışıyorsa hizmetin yeniden çalıştırılmasını nasıl engeller
- 3. Exity'den Varlık Yöneticisi'nin Yeniden Başlatılması
- 4. Git'te birleştirme sonrasında yama yeniden nasıl biçimlendirilir?
- 5. çökme
- 6. core-site.xml güncellendiğinde Hadoop'un yeniden başlatılması gerekiyor
- 7. Jenkins veya Phing ile apache'nin yeniden başlatılması
- 8. Eclipse'in düzgün çalışması için sık sık yeniden başlatılması gerekiyor
- 9. Oturum kapatma sonrasında yetkilendirmenin yeniden kullanılması nasıl engellenir
- 10. Yükseltme/güncelleme sonrasında Android uygulama verilerini en kolay nasıl silebilirim?
- 11. Çökme işlemimde minidump nasıl oluşturulur?
- 12. Elastic Beanstalk dağıtımından sonra SolR'nin otomatik olarak yeniden başlatılması
- 13. Android Oku içeriği (içerik sonucu sonrasında kayıp)
- 14. Android Custom ArrayAdapter, filtre sonrasında yenilemiyor
- 15. Esnek bir öğenin yeniden boyutlandırılmasıyla içerik nasıl önlenir?
- 16. Geri sayım bileşeni: Angular2'de yeniden oluşturma nasıl önlenir?
- 17. Performans testi yapılırken SQL Server'ın "yeniden oluşturma istatistikleri" nasıl önlenir?
- 18. Bir hizmetin hata ayıklanması
- 19. Dinamik rotaları kaydetme, bir uygulama yeniden başlatılması mı gerekiyor?
- 20. Yükleyicide sayfanın rekreasyonu nasıl önlenir?
- 21. Yükleme sonrasında Android SDK Manager seçeneğini göremiyor; Yönetici Olarak Çalışmıyor
- 22. Brunch saatinde önbellekleme nasıl önlenir
- 23. WPF uygulamasının başlatılması nasıl özelleştirilir?
- 24. ApplicationShortCut kullanırken çökme SIGTRAP
- 25. .NET Framework 3.5 SP1'in yeniden başlatılması gerekiyor mu?
- 26. WiX kullanarak kurulumdan sonra makinenin yeniden başlatılması istenebilir mi?
- 27. İthalat derleme nasıl önlenir?
- 28. CSS bildirimi nasıl önlenir?
- 29. Burada numberformatexception nasıl önlenir?
- 30. FileNotFoundException nasıl önlenir?
Servisinizin iskelet uygulamanızı gösterin. –
Düzenli bir Hizmet mi yoksa Bir Amaç Hizmeti mi? –