2017-01-11 33 views
6

Uygulamam UIBackgroundMode kullanıyor, yani uygulama etkin olmasa bile Bluetooth olayları meydana geldiğinde iOS tarafından yeniden başlatılıyor. Bu nedenle, Bluetooth olayları iOS tarafından bir arka plan sırasına gönderilir (sıra, tarafımdan belirlenir).Uygulama arka plana yeniden başladığında ana sıra gönderilir mi?

Can geri ana kuyruğuna ancak gönderme kodu, yani

DispatchQueue.main.async { } (Swift)

dispatch_async(dispatch_get_main_queue(), ^{ }) (Objective-C)

ve çalışma döngüsü çalıştığını farz, yani benim bloklar gönderilir mi? Ya da arka plan modunda askıya alınan ana kuyruktur ve bu yüzden gönderim bloklarını eklemekten kaçınmalı mıyım?

+0

Aynısını yapmayı denediniz mi? –

+0

iOS'un ana döngüyü çalıştırdığı bir deneme yaptım çünkü uygulama arka plan modunda başlatıldığında bloklar yürütülür. Ancak, iOS'un _always_ gibi davranacağını varsayamam. Ana döngüyü çalıştırmaya devam edersek, bu benim uygulama için işleri çok daha kolay hale getirir çünkü o zaman iş parçacığı senkronizasyonuna gerek duymuyorum çünkü gerektiğinde ana sıraya göndermem yeterli olur. –

cevap

3

Arka plandayken ana kuyruğa gönderilmesi güvenli olmalıdır.

Uygulamanız arka planda olduğunda, sistem uygulamanızı daha düşük öncelikli olarak işaretlediğinden, yaptığı her şey arka plan işlerinde teknik olarak yapılır. Ancak, sistemin kodunuzun çalıştırılmasına izin verebilmesi için, en azından bir ana sıranın olması gerekir. Bu nedenle, ana sıraya erişebileceğinizi varsaymak güvenlidir. İsterseniz buradan başka çalışma kuyrukları oluşturabilirsiniz, ancak her şey büyük olasılıkla yürütme için bir arka plan iş parçacığına eklenecektir, bu nedenle çok fazla fayda göremeyebilirsiniz. Ayrıca arka plan iş parçacığı sınamanın biraz zor olabileceğini unutmayın. Arka plan iş parçacıkları her zaman çalıştırılacak ve simülatörde iken asla kapanmayacak gibi görünmektedir. Xcode bağlı ve hata ayıklama ise bir cihaz üzerinde test ederken aynı şey olur. Sistem ayrıca, uygulamanızı 10 dakika boyunca sürekli olarak çalıştırmanıza izin verir (son kontrol ettim, gerekirse arka plana girdikten sonra bu son iki yılda değişti) ve ek olarak alacağınız bluetooth etkinliği gibi bir şey gerektirdikten sonra arka planda zaman.

Kaynak: Arkaplan uygulamalarla uğraşan talihsiz bir deneyim.

+0

Yaklaşık 10 dakika emin misiniz? Dokümantasyon, uygulamaların askıya alınmadan önce arka plan moduna geçtiğinde 10 _seconds_ olduğunu söylüyor. –

+1

Bir arka plan hizmetiniz olmadığında (konum güncellemeleri gibi) 10 saniye Ahh haklı, bu noktada sistemin o konum güncellemelerinin en fazla 10 dakika sürmesine izin vereceğini düşünüyorum. Elbette başka bir şey, uygulamanıza önemli bir yer değişikliği veya bir bluetooth güncellemesi gibi daha fazla arka plan süresi verir. Alt satırda, uygulamaların arka planda çalışacak şekilde oluşturulduğunda, her an kapatılmaya hazır olmanız gerekir. – esthepiking