Ağ erişimini optimize edin

Veri aktarmak için kablosuz radyoyu kullanmak, uygulamanızın pil tüketimini en çok engelleyen nedenlerinden biridir. Ağ etkinliği nedeniyle pil tüketimini en aza indirmek için bağlantı modelinizin temel radyo donanımını nasıl etkileyeceğini anlamanız çok önemlidir.

Bu bölümde kablosuz radyo durum makinesi tanıtılmakta ve uygulamanızın bağlantı modelinin bununla nasıl etkileşimde bulunduğu açıklanmaktadır. Ardından, uygulamanızın veri tüketiminin pil üzerindeki etkisini en aza indirmeye yardımcı olan çeşitli teknikler sunar.

Radyo durum makinesi

Kullanıcınızın cihazındaki kablosuz radyonun, tükettiği pil gücü miktarını en aza indiren yerleşik güç tasarrufu özellikleri vardır. Kablosuz radyo tam olarak etkin olduğunda önemli miktarda güç tüketir; ancak devre dışı veya bekleme modundayken çok az güç tüketir.

Unutulmaması gereken önemli bir faktör, telsizin bekleme modundan anında tam olarak etkin duruma geçemeyeceğidir. Radyonun "açılmasıyla" ilişkili bir gecikme süresi vardır. Bu nedenle pil, kullanılmadığı zamanlarda güç tasarrufu yapmak için yüksek enerji durumundan düşük enerji durumuna yavaş yavaş geçer ve bu sırada radyonun "açılmasıyla" ilişkili gecikmeyi en aza indirmeye çalışır.

Tipik bir 3G ağ radyosunun durum makinesi, üç enerji durumundan oluşur:

  • Tam güç: Bir bağlantı etkin olduğunda kullanılır ve cihazın mümkün olan en yüksek hızda veri aktarmasına olanak tanır.
  • Düşük güç: Pil gücü tüketimini yaklaşık %50 azaltan bir ara durum.
  • Bekleme: Etkin ağ bağlantısının olmadığı minimum güç tüketim durumu.

Düşük ve bekleme durumları pili önemli ölçüde daha az tüketse de ağ isteklerinde önemli ölçüde gecikmeye yol açar. Düşük durumdan tam güç durumuna dönmek yaklaşık 1,5 saniye, bekleme modundan tam güç moduna geçmek 2 saniyeden uzun sürebilir.

Durum makinesi, gecikmeyi en aza indirmek için daha düşük enerji durumlarına geçişi ertelemek üzere bir gecikme kullanır. Şekil 1'de tipik bir 3G radyo için AT&T zamanlamaları kullanılmıştır.


Şekil 1. Tipik 3G kablosuz radyo durum makinesi.

Her cihazdaki radyo durumu makinesi, özellikle de ilgili geçiş gecikmesi ("kuyruk zamanı") ve başlatma gecikmesi, kullanılan kablosuz radyo teknolojisine (3G, LTE, 5G vb.) bağlı olarak değişiklik gösterir ve cihazın çalıştığı operatör ağı tarafından tanımlanıp yapılandırılır.

Bu sayfada, AT&T tarafından sağlanan verilere dayalı olarak tipik bir 3G kablosuz radyo istasyonunun temsili durum makinesi açıklanmaktadır. Ancak genel ilkeler ve ortaya çıkan en iyi uygulamalar tüm kablosuz radyo uygulamaları için geçerlidir.

Bu yaklaşım, kullanıcılar web'e göz atarken istenmeyen gecikmeleri önlediği için özellikle tipik mobil web taramalarında etkilidir. Nispeten düşük olan kuyruk süresi, ayrıca göz atma oturumu bittikten sonra radyonun daha düşük enerji durumuna geçebilmesini de sağlar.

Ne yazık ki bu yaklaşım, uygulamaların hem ön planda (gecikmenin önemli olduğu yerlerde) hem de arka planda (pil ömrünün önceliklendirilmesi gereken) çalıştığı Android gibi modern akıllı telefon işletim sistemlerinde verimsiz uygulamalara yol açabilir.

Uygulamalar radyo durumu makinesine nasıl etki eder?

Oluşturduğunuz her yeni ağ bağlantısında radyo tam güç durumuna geçer. Daha önce açıklanan normal 3G radyo durumu makinesinde, aktarım işleminiz boyunca tam güçte kalır (ek olarak 5 saniyelik ek bir kuyruk zamanı) ve ardından düşük enerji durumunda 12 saniye kalır. Bu nedenle, tipik bir 3G cihazda her veri aktarımı oturumu, radyonun en az 18 saniye boyunca enerji çekmesine neden olur.

Pratikte bu, dakikada üç kez bir saniyelik veri aktarımı gerçekleştiren bir uygulamanın kablosuz radyoyu sürekli etkin durumda tutacağı ve tam bekleme moduna geçerken radyoyu tekrar yüksek güce getireceği anlamına gelir.


Şekil 2. Dakikada üç kez çalışan bir saniyelik aktarım için göreli kablosuz radyo gücü kullanımı. Bu değere çalıştırmalar arasındaki "güç artırma" gecikmesi dahil değildir.

Buna karşılık, aynı uygulama her dakika üç saniyelik tek bir aktarım işlemi yaparak veri aktarımlarını paket halinde sunuyorsa bu durum, radyoyu dakikada toplam yalnızca 20 saniye boyunca yüksek güç durumunda tutar. Bu, radyonun her dakika 40 saniye boyunca bekleme modunda kalmasına izin vererek pil tüketiminde önemli bir düşüşe yol açar.


Şekil 3. Dakikada bir kez çalışan üç saniyelik aktarımlar için göreli kablosuz radyo gücü kullanımı.

Optimizasyon teknikleri

Artık ağ erişiminin pil ömrünü nasıl etkilediğini anladığınıza göre, hızlı ve akıcı bir kullanıcı deneyimi sunarken aynı zamanda pil tüketimini azaltmak için yapabileceğiniz birkaç şeyden bahsedebiliriz.

Paket veri aktarımları

Önceki bölümde de belirtildiği gibi, veri aktarımlarınızı daha seyrek daha fazla veri aktaracak şekilde gruplandırmak, pil verimliliğini artırmanın en iyi yollarından biridir.

Uygulamanızın bir kullanıcı işlemine yanıt olarak hemen veri alması veya göndermesi gerekiyorsa bunu yapmak elbette her zaman mümkün değildir. Verileri tahmin edip önceden getirerek bu sorunu azaltabilirsiniz. Sunucuya günlük veya analiz gönderme ya da uygulama tarafından başlatılan diğer acil olmayan veri aktarımları gibi diğer senaryolar ise toplu hale getirme ve paket haline getirme konularında oldukça elverişlidir. Arka plandaki ağ aktarımlarını planlamayla ilgili ipuçları için Uygulama tarafından başlatılan görevleri optimize etme bölümüne bakın.

Verileri önceden yükleme

Verileri önceden getirmek, uygulamanızın çalıştırdığı bağımsız veri aktarımı oturumlarının sayısını azaltmanın başka bir etkili yoludur. Önceden getirme sayesinde, kullanıcı uygulamanızda bir işlem gerçekleştirdiğinde, uygulama bir sonraki kullanıcı işlemleri dizisi için en çok hangi verilerin gerekeceğini tahmin eder ve bu verileri tek bir bağlantı üzerinden tam kapasitede getirir.

Aktarımlarınızın önden yüklenmesi, verileri indirmek için gereken radyo etkinleştirmelerinin sayısını azaltır. Sonuç olarak yalnızca pil ömrünü korumakla kalmaz, aynı zamanda gecikmeyi iyileştirir, gerekli bant genişliğini ve indirme sürelerini azaltır.

Önceden getirme, bir işlem gerçekleştirmeden veya verileri görüntülemeden önce indirmelerin tamamlanmasını beklemekten kaynaklanan uygulama içi gecikmeyi en aza indirerek daha iyi bir kullanıcı deneyimi de sunar.

Aşağıda pratik bir örnek verilmiştir.

Haber okuyucu

Birçok haber uygulaması, yalnızca bir kategori seçildikten sonra başlıkları, yalnızca kullanıcı bunları okumak istediğinde tam makaleleri ve ekranı kaydırdıkları sırada küçük resimleri indirerek bant genişliğini azaltmaya çalışır.

Bu yaklaşım kullanıldığında radyo, kullanıcılar başlıkları kaydırırken, kategorileri değiştirirken ve makaleleri okurken çoğu kullanıcının haber okuma oturumunda etkin kalmaya zorlanır. Ayrıca enerji durumları arasında sürekli geçiş yapılması, kategoriler arasında geçiş yaparken veya makaleleri okurken önemli bir gecikmeye yol açar.

Daha iyi bir yaklaşım, ilk haber başlıkları ve küçük resimleri grubuyla başlayıp düşük gecikmeli bir başlangıç süresi sağlayarak ve geri kalan başlıklar, küçük resimler ve en azından birincil başlık listesinden sunulan her makalenin makale metni ile devam ederek makul miktarda veriyi başlangıçta getirmektir.

Başka bir alternatif de her başlığı, küçük resmi, makale metnini ve hatta muhtemelen tam makale resmini önceden belirlenmiş bir plana göre arka planda önceden getirmektir. Bu yaklaşım, hiç kullanılmayan içeriğin indirilmesi için önemli miktarda bant genişliği harcanması ve pil ömrü harcanmasının riskini doğurur. Bu nedenle dikkatli uygulanmalıdır.

Göz önünde bulundurulması gereken diğer noktalar

Verileri önceden getirmenin pek çok avantajı olsa da, çok etkin bir şekilde önceden getirmek, kullanılmayan verileri indirerek pil tüketimi ve bant genişliği kullanımının yanı sıra indirme kotasını artırma riskini de beraberinde getirir. Uygulama, önceden getirme işleminin tamamlanmasını beklerken önceden getirmenin uygulamanın başlatılmasını geciktirmediğinden emin olmak da önemlidir. Pratikte bu, verilerin kademeli olarak işlenmesi veya uygulama başlatma için gereken verilerin önce indirilip işlenmesi şeklinde önceliklendirilmiş olarak ardışık aktarımlar başlatmak anlamına gelebilir.

Verileri önceden getirme konusunda ne kadar agresif bir şekilde gerçekleştireceğiniz, indirilen verilerin boyutuna ve kullanılma olasılığına bağlıdır. Kaba bir kılavuz olarak, daha önce açıklanan durum makinesine dayanarak, mevcut kullanıcı oturumunda kullanılma olasılığı% 50 olan veriler için, kullanılmayan verileri indirmenin potansiyel maliyeti, ilgili verileri indirmemenin sağlayacağı potansiyel tasarrufla eşleşmeden önce, genellikle yaklaşık 6 saniye (yaklaşık 1-2 megabayt) süreyle önceden getirebilirsiniz.

Genel olarak, verileri yalnızca 2 ila 5 dakikada bir 1 ila 5 megabayt aralığında yeni bir indirme işlemi başlatmanız gereken şekilde önceden getirmek iyi bir uygulamadır.

Bu ilkeye göre, video dosyaları gibi büyük indirme işlemleri düzenli aralıklarla (2-5 dakikada bir) parçalar halinde indirilmeli ve yalnızca sonraki birkaç dakika içinde görüntülenebilecek video verileri etkili bir şekilde önceden getirilmelidir.

Tam indirme işlemini yalnızca kablosuz ağa bağlıyken ve muhtemelen yalnızca cihaz şarj olurken gerçekleştirilecek şekilde programlamak çözümlerden biridir. WorkManager API, tam olarak bu kullanım alanını destekler. Bu sayede, şarj olma ve kablosuz ağa bağlanma gibi geliştirici tarafından belirlenen kriterleri karşılayana kadar arka plan çalışmasını kısıtlayabilirsiniz.

İstekte bulunmadan önce bağlantıyı kontrol edin

Hücre sinyali aramak, mobil cihazlarda enerjiyi en fazla tüketen işlemlerden biridir. Kullanıcı tarafından başlatılan istekler için en iyi uygulamalardan biri, Bağlantı durumunu ve bağlantı sayacını izleme bölümünde gösterildiği gibi önce ConnectivityManager kullanarak bağlantı olup olmadığını kontrol etmektir. Ağ yoksa uygulama, mobil radyoyu arama yapmaya zorlamayarak pilden tasarruf edebilir. Daha sonra istek, bağlantı kurulduğunda diğer isteklerle birlikte toplu bir şekilde planlanabilir ve gerçekleştirilebilir.

Havuz bağlantıları

Uygulamanızın ağ bağlantılarını bir havuzda toplamak, toplu hale getirme ve önceden getirme işlemlerinin yanı sıra yardımcı olabilecek diğer bir stratejidir.

Mevcut ağ bağlantılarını yeniden kullanmak, yeni bağlantılar başlatmaktan genellikle daha verimlidir. Bağlantıların yeniden kullanılması, ağın tıkanıklık ve ilgili ağ verisi sorunlarına daha akıllıca tepki vermesini de sağlar.

HttpURLConnection ve OkHttp gibi çoğu HTTP istemcisi, bağlantı havuzunu varsayılan olarak etkinleştirir ve birden çok istek için aynı bağlantıyı yeniden kullanır.

Özet ve geleceğe bakmak

Bu bölümde, kablosuz radyo hakkında çok şey öğrendiniz ve pil tüketimini azaltırken hızlı, duyarlı bir kullanıcı deneyimi sağlamak için geniş ölçekte uygulayabileceğiniz bazı stratejiler de öğrendiniz.

Bir sonraki bölümde, çoğu uygulamada yaygın olan üç farklı ağ etkileşimi türünü ayrıntılı olarak inceleyeceğiz. Bu türlerin her birinin arkasındaki etmenlerin yanı sıra bu etkileşimleri verimli bir şekilde yönetmek için kullanılan modern teknikler ve API'leri öğreneceksiniz.