2016-08-19 20 views
5

iOS 8 & 9 için bir iOS uygulaması yapıyorum ve uygulama arka plana geçtiğinde sistemin yalnızca 2'den sonra sona ermesi sorunuyla karşı karşıyayım ya da 3 dakika.iOS uygulamasının sistem tarafından çok sık sonlandırılmasından nasıl sakınırsınız?

Benim test kolaydır: Ben iPhone'dan çalışan tüm uygulamaları kapatma

  1. .
  2. iPhone'umu yeniden başlatıyorum (başka hiçbir uygulamanın belleğe sahip olmadığından emin olmak için).
  3. Uygulamamı başlatıyorum.
  4. Uygulamamın içinde hiçbir şey yapmam.
  5. Uygulamamı arka plana taşıyarak "Ana Sayfa" düğmesine basıyorum.
  6. 2 ya da 3 dakika boyunca başka bir şey yapmayacağım.
  7. Uygulamamı tekrar açıp şaşırıyorum, sistem sona erdi ve şimdi yeni bir lansman olarak yeniden başlatılıyor.

Bazı yorumlar:

  • arka ne herhangi bir hizmete CoreLocation kullanmaz uygulama.
  • Çok fazla bellek tüketip tüketmediğini anlamaya çalışırken uygulamayı geliştirdim. Arka plana taşırken, yaklaşık 25 MB RAM belleği tüketir. Aşağıda bir ekran görüntüsü ekliyorum.
  • Bu davranış, iPhone 5, 5s, 6, 6+ üzerinde test edilmiştir.
  • iPhone 6s ve 6s + 'da gerçekleşmesi biraz daha uzun sürüyor, ancak yine de oluyor.

App Allocations Profile

Sorum şu: neden bu oluyor biliyor musunuz? göz önünde bulundurmayacağım veya unuttuğum bir şey var mı?

Uygulamamı CoreLocation veya benzeri bir şey kullanarak arka planda çalışacak şekilde zorlamak istemiyorum. Ve eğer sistemim en sonunda uygulamamı öldürürse ben iyiyim. İstemediğim şey, uygulamamı arka plana taşıdığım her seferinde, sistemi sonlandırmasıdır.

Herhangi bir ipucu veya yardım takdir edilecektir. Tüm başvurular otomatik olarak Apple belgelerine göre sistemin

tarafından öldürülür

+0

ayıklama Navigator seçmek yöntemlerde kırılma noktası ekleyiniz ve bunun 'didFinishLaunchingWithOptions' tekrar çağrıldığını görüyoruz –

+0

Uygulamanızın gerçekte ne yapıyor? Örneğin. OpenGL aramaları uygulamanızı öldürür. –

cevap

0

sayesinde:

Uygulama Sonlandırma

Uygulamalar herhangi bir zamanda gerçekleşmesi fesih için hazır olmalıdır Kullanıcı verilerini kaydetmek veya diğer kritik görevleri gerçekleştirmek için> beklememelisiniz. Sistem tarafından başlatılan> sonlandırma, bir uygulamanın yaşam döngüsünün normal bir parçasıdır. Sistem genellikle> uygulamaları sonlandırır, böylece hafızayı geri kazanabilir ve diğer uygulamalar için kullanıcı tarafından başlatılır> kullanıcı tarafından başlatılır, ancak sistem aynı zamanda olayları yanlış davranan veya olaylara zamanında yanıt vermeyen uygulamaları da sonlandırabilir.

Askıya alınan uygulamalar, sonlandırıldıklarında bildirim almazlar; > sistem işlemi öldürür ve karşılık gelen belleği geri yükler.Bir uygulama> şu anda arka planda çalışıyorsa ve askıya alınmıyorsa, sistem uygulama sonlandırılmadan önce uygulama temsilcisinin> applicationWillTerminate: öğesini çağırır. > Cihaz yeniden başladığında sistem bu yöntemi çağırmaz.

Uygulamanızı sonlandıran sisteme ek olarak, kullanıcı uygulamanızı çok görevli kullanıcı arayüzünü kullanarak açıkça> sonlandırabilir. Kullanıcı tarafından başlatılan sonlandırma> askıya alınmış bir uygulamayı sonlandırmakla aynı etkiye sahiptir. Uygulamanın işlemi> öldürüldü ve uygulamaya bildirim gönderilmez.

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW1

Sen konumunu izleyebilir ama kesinlikle mavi durum çubuğu o bir uygulama kullanımı GPS izlemeyi gösteren göreceksiniz.

Belki "uyandırma" sessiz bildirim ile arka planda uygulama ...

o sistemin güven hayatta uygulamanızı tutmak için gerekli değilse ...

+0

Mesaj için teşekkürler. Bunu zaten çoktan biliyordum. Benim sorum bu yüzden neden bu kadar hızlı sona erdiriyor? ve bundan kaçınmak için yapabileceğim bir şey varsa. Diğer uygulamalarla oynarken, bazılarının sistem tarafından sonlandırılması için daha fazla zaman ayırdığını görüyorum. Eğer NSLog ("% f", [UIApplication sharedApplication] .backgroundTimeRemaining @) kontrol edebilir @vilanovi – vilanovi

+0

; ApplicationDidEnterBackground –

+0

Sadece netleştirmek için: Uygulamamın arka planda çalışmasına ihtiyacım yok. Sadece sistemimin bu uygulamayı hızlıca "öldürmesini" istemiyorum. Uygulama arka planda duraklatılabilir. –

-1

Uygulamalar deneyebilirsiniz hangi Arka planda çalışan pil ömrünü daha çabuk boşaltır, Cihazın uygulama yerine kötü bir şekilde algılanmasını sağlar, çünkü ortalama tüketicinin bir uygulama boşaltma bataryası olduğu konusunda hiçbir fikri yoktur. Böylece iOS, uygulamanızın birkaç saniye içinde arka planda çalışmasına izin vermez. Ancak bir istisna vardır, bir uygulama, bir Arka Plan Görevi başlattığını bildirerek buna uzatma talebinde bulunabilir.

fazla bilgi için size linkleri aşağıda kontrol edebilirsiniz: http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/

http://www.speirs.org/blog/2012/1/2/misconceptions-about-ios-multitasking.html

+0

Arka plan uygulaması yürütmesini istemiyorum. Lütfen cevaplamadan önce soruyu okuyun. – vilanovi

+0

Sevgili vilanovi, atlandu'nun cevabı için, uygulamanın neden bu kadar hızlı sonlandığını yorumladınız? Bu soru için düz cevap pil ömründen tasarruf etmektir. İkinci sorgunuz için bundan kaçınmak mı ?, Bunun için beginBackgroundTaskWithExpirationHandler'ı linkler vererek kullanmanızı tavsiye ederim. –

+0

Evet, doğru.Ancak sorunun temeli, uygulamanın arka planda nasıl performans göstereceğini anlamak değil, sistem tarafından neden ve ne zaman öldürüldüğünü anlamaya çalışmaktır. – vilanovi

-1
  1. Bazı hata kodu içinde de. Uygulamanın temsilci .. etmeden sen muktedir hatanızı bulmak için olabilir ... uygulamanızı çalıştırmak

  2. Ya da sonlandırılmış olacak çok fazla bellek ..

+0

Bu tür sorunlardan zaten haberdarım. Burada iOS'un arka plan uygulamalarını nasıl yönettiğine dair daha genel bir anlayıştan bahsediyorum. – vilanovi

İlgili konular