Bir etkinliğe bağlanmak için bir etkinliğin en iyi yerinin ne olduğunu bilmek ister misiniz? onResume()
numaralı telefondan ve ayrıca onCreate()
numaralı telefondan örnekler gördüm. Ben onPause()
onPause()
içinde ben bir servisten yapacağım çünkü onCreate()
içine koyarak bir sorun olup olmadığını kendimi soruyordu, ben hizmetten ayrılırsam bir serviceConnectionLeak alamadım. Şimdi Ana Sayfa Düğmesine basıp Ana Ekrana geçersem, Görev Yöneticisi'nden Etkinliğe geri döndüğümde Etkinlik hizmetten ayrılırsa, onCreate()
çağrılmayacak ve eğer kod bir hizmetten bir NullPointerException alacağım. Yalnızca onResume()
ve onPause()
'da bağlarım varsa ve bu sorunu çözmüyorsam, bu sorunla karşılaşmam. Haklı mıyımOnCreate() veya onResume() içinde Hizmet Bağlama
cevap
Genellikle de bunu tavsiye ederim ya onCreate()
/onDestroy()
veya istediğiniz semantik bağlı/onStop()
onStart()
:
senin
Activity
istiyorService
öyle süre boyunca etkileşim edilecek olursa (örneğin, sizin için bir ağdan bazı verileri alabilir ve hazır olduğunda verileri geri gönderir ve arka plandayken buna izin vermek istersiniz, böylece kullanıcı geri dönerse, verileri hazırlarsınız), sonraonCreate()
/onDestroy()
muhtemelen uygun. Buradaki semantiklerin,Activity
'un çalıştığı tüm zamanınService
olmasını gerektirdiğini, yani buService
başka bir işlemde çalışıyorsa, o zaman ağırlığını artırdınız ve arka plandayken öldürülmesini daha olası hale getirdiğinizi unutmayın. .sizin
Activity
görünür, sonraonStart()
/onStop()
uygun ikenService
ile çalışan tek ilgileniyorsa. Bu,Activity
öğenizin, kullanıcı bıraktığında (ve artık görünmüyorsa)Service
'dan çıkacak ve geri dönüşü tekrar başlatıp yeniden başlatıldığında yedeklenecek demektir.
Genellikle/bağlama yapıyor tavsiye onResume()
ve onPause()
yılında unbind olmaz. Bunlar genellikle Service
'u (ve dolayısıyla yükünüzü) kullandığınız miktarı önemli ölçüde azaltmaz ve aslında her etkinlik geçişinde bir duraklama ve özgeçmiş olduğu için, bu mümkün olduğunca hafif tutmak istediğiniz bir kod yoludur. Burada yapmak, diğer beklenmedik olumsuz sonuçlara neden olabilir: Örneğin, uygulamanızda birden fazla Activity
s aynı Service
'a bağlanırsa, bu etkinliklerin ikisi arasında bir geçiş olduğunda, Service
da kullanılabilir ve Activity
geçerli olarak duraklatılmış olarak yeniden oluşturulabilir bir sonraki devam edilir.Ayrıca
bu çiftleri (örneğin, vb alıcıları kayıt, Service
s bağlanma) gereksinim elde etmek ve daha sonra serbest bırakılması için uygun çift sağlamak için olması amaçlanmıştır (/ onResume()
onPause()
onCreate()
/onDestroy()
, onStart()
/onStop()
) onlar ihtiyaç duyulmadan önce doğru bir şekilde elde edilir ve artık ihtiyaç duyulmadığında serbest bırakılır (ve sızdırmaz).
Bunu üstüne koymayacaksanız,() yeterli olur mu? 'if (listAdapter == null) {listAdapter = new MyListAdapter (getApplicationContext());} – likejiujitsu
ama bazen @hackbod, ... aynı zamanda stopService() ve aynı zamanda unbindService() throuh onStop() bırakırken aynı hatayı kaldı Bu hizmete bağlanan her aktivitenin yöntemi. ve ... hatayı düzeltmek için, sadece dene-ve-yakaladım ve ... çözdüm! : D – gumuruh
Dedikleriniz doğru. Çoğu durumda onResume()
'a kayıt olmak ve onPause()
numaralı telefondan kayıt olmak isteyeceksiniz. Eğer onCreate()
ve onDestroy()
modellerini kullanırsanız, duraklatıldığında, kötü bir vatandaş olan güncellemeler için kayıt olmaya devam edersiniz. onCreate()
'a kayıt olur ve onPause()
kayıt defterine kaydolamazsanız, görevi sürdürdüğünüzde kayıt silinir, ki bu kesinlikle istediğiniz gibi değildir.
"OnCreate() ve Destroy() öğelerinde kullanıyorsanız, duraklatıldığında, kötü bir vatandaş olan güncelleştirmeler için yine de kaydolacaksınız." Bu ifadeden alıntı yapabileceğiniz bir kaynağınız var mı? – CommonsWare
Bu benim anlayışımdı ama ben size erteliyorum. Bu doğru değil mi? – RickNotFred
Eh, benim bildiğim genel bir açıklama olarak değil. Bir gereksinim olarak bir vis servisine "güncellemeler için kayıt" kavramı vardır. Etkinliğiniz ekrandan çıktığında, özellikle açmak isteyebileceğiniz belirli servisler (ve belki de kapanabilir). Başkaları olmayabilir. Örneğin, GPS'e bağlı bir servis kapanmak isteyebilir, ancak sadece uygulama uzun bir süre ekran dışında ise kullanıcı, GPS düzeltmesini yeniden elde etmek zorunda kaldığı için daha az sinirlenir. Şimdi, benimkinden daha iyi bir tavsiye olabilir, bu yüzden bir kaynağın olup olmadığını sordum. – CommonsWare
- 1. Android onCreate ve onResume etkinlikleri
- 2. OnCreate içinde Yumuşak Girişi Gizle
- 3. SQLiteOpenHelper'da onCreate içinde İçeriği Alma
- 4. Döndükten sonra onCreate() FragmentActivity
- 5. Android Bir hizmet içinde Zamanlayıcı
- 6. onCreate
- 7. onCreate up navigation içinde Aktivite A'da aranıyor
- 8. Fragment onResume
- 9. onPause, onResume Android'deki etkinlik olayları
- 10. WCF bir hizmet veya birden çok hizmet
- 11. OnResume() paketinde onSaveInstanceState() paketi nasıl alınır?
- 12. Enjeksiyon tarihiFilterJs içinde bir hizmet içinde süzgeç
- 13. Neden Fragman'ın onCreate(), bazen Activity'ın onCreate() öğesinden önce çağrılır?
- 14. Hizmet Broker Veya SqlDependency SqlLocalDb?
- 15. OnsenUI onresume yeniden yükleme uygulaması
- 16. Bağlama yeniden değerlendirmek veya Aurelia
- 17. android: camera onPause/onResume issue
- 18. onCreate() getWritableDatabase() tarafından çağrılmadı
- 19. FindViewById kullanırken onCreate() içinde NullPointerException - setContentView daha önce kullanılır?
- 20. Xamarin Formlar Düğmesi Bir ListView içinde bağlama komutunu bağlama
- 21. Android - openOptionsMenu onCreate
- 22. Oncreate yönteminde Android geçişi
- 23. LocationServices.FusedLocationApi.getLastLocation onCreate() İşte yöntemde
- 24. Android onResume güncelleme listesi bağdaştırıcısı
- 25. Yayıncı Bir Hizmet İçinde Yayın Alıcısı
- 26. WPF içinde bağlama kaldır kodu kullanarak
- 27. Bahar mvc içinde bağlama verileri JS
- 28. C# içinde statik olarak bağlama C#
- 29. Cabal (Haskell) içinde bir oluşturma aracını bağlama
- 30. Alternatif SLF4J Bağlama veya Birim Testi Yapılandırması?
OnCreate() 'da, onDestroy()' da açmayı ve onPause() 'da açmayı engelleyen bazı örneklere tekrar bakıyordum. Ama hala benim için net değil. – Harold