Ağ erişimini optimize edin

Veri aktarmak için kablosuz radyonun kullanılması, potansiyel olarak uygulamanızın en önemli pil tüketimi kaynaklarından biridir. Ağ etkinliğiyle ilişkili 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 durumu makinesi tanıtılmakta ve uygulamanızın bağlantı modelinin makineyle nasıl etkileşimde bulunduğu açıklanmaktadır. Ardından, takip edildiğinde uygulamanızın veri tüketiminin pil üzerindeki etkisini en aza indirmeye yardımcı olacak çeşitli teknikler sunar.

Radyo durum makinesi

Kullanıcınızın cihazındaki kablosuz radyo, tükettiği pil gücü miktarını en aza indirmeye yardımcı olan yerleşik güç tasarrufu özelliklerine sahiptir. Kablosuz radyo tamamen 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, radyonun bekleme modundan tam olarak etkin duruma anında geçemeyeceğidir. Radyonun "açılması" ile ilişkili bir gecikme süresi vardır. Bu nedenle pil, kullanılmadığı zamanlarda güç tasarrufu sağlamak ve radyonun "açılması" ile ilişkili gecikmeyi en aza indirmeye çalışır. Böylece yüksek enerji durumlarından düşük enerji durumuna yavaş yavaş geçer.

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

  • Tam güç: Bir bağlantı aktifken 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.
  • Beklemede: Ağ bağlantısının etkin olmadığı minimum güç tüketimi durumu.

Düşük ve bekleme durumları önemli ölçüde daha az pil tüketir, ancak aynı zamanda ağ isteklerinde önemli ölçüde gecikmeye yol açar. Düşük durumdan tam güç kaynağına dönmek yaklaşık 1,5 saniye, bekleme modundan tam güç moduna geçmek ise 2 saniyeden uzun sürebilir.

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


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

Her bir cihazdaki radyo durumu makinesi, özellikle de ilişkili geçiş gecikmesi ("kuyruk süresi") ve başlatma gecikmesi, kullanılan kablosuz radyo teknolojisine (3G, LTE, 5G vb.) göre değişir 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 için temsili durum makinesi açıklanmaktadır. Ancak genel ilkeler ve sonuçta 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'de gezinme için etkilidir. Nispeten düşük olan bekleme süresi, tarama oturumu sona erdiğinde radyonun daha düşük enerji durumuna geçebilmesini de sağlar.

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

Uygulamalar, radyo durumu makinesine nasıl etki eder?

Her yeni ağ bağlantısı oluşturduğunuzda, radyo tam güç durumuna geçer. Daha önce açıklanan tipik bir 3G radyo durumu makinesinde, aktarım işleminiz süresince tam güçte kalır. Buna ek olarak 5 saniye ek bekleme süresinden sonra düşük enerji durumunda 12 saniye kalır. Dolayısıyla, tipik bir 3G cihazda her veri aktarımı oturumu, radyonun en az 18 saniye boyunca enerji çekmesine neden olur.

Pratikte bu, dakikada üç kez 1 saniyelik veri aktarımı yapan bir uygulamanın kablosuz radyoyu sürekli olarak etkin tutacağı ve bekleme moduna girerken tekrar yüksek güce hareket ettireceği anlamına gelir.


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

Buna kıyasla aynı uygulama, veri aktarımlarını her dakika tek bir üç saniyelik aktarımla paket hâline getirirse bu durumda radyo her dakika toplamda yalnızca 20 saniye boyunca yüksek güç durumunda tutulur. Bu şekilde, radyo her dakika 40 saniye boyunca bekleme modunda kalır ve bu da pil tüketiminde önemli bir düşüşe neden olur.


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

Optimizasyon teknikleri

Ağ erişiminin pil ömrünü nasıl etkilediğini artık anladığınıza göre, şimdi de pil tüketimini azaltmaya ve aynı zamanda hızlı ve akıcı bir kullanıcı deneyimi sağlamaya yardımcı olmak için yapabileceğiniz birkaç şeyden bahsedelim.

Paket veri aktarımları

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

Uygulamanızın kullanıcı işlemine yanıt olarak anında veri alması veya göndermesi gerekiyorsa bunu yapmak her zaman mümkün değildir. Verileri tahmin ederek ve önceden getirerek bu etkiyi azaltabilirsiniz. Sunucuya günlük kaydı veya analiz gönderme ve acil olmayan, uygulama tarafından başlatılan diğer veri aktarımları gibi diğer senaryolar, toplu hale getirme ve paketleme işlemleri için çok uygundur. Arka planda 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 getirme

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 ile kullanıcı, uygulamanızda bir işlem gerçekleştirdiğinde uygulama, bir sonraki kullanıcı işlemleri için hangi verilerin muhtemelen gerekli olacağını tahmin eder ve bu verileri tek bir seri işlemde, tek bir bağlantı üzerinden ve tam kapasitede getirir.

Aktarımlarınızı önden yükleyerek, verileri indirmek için gereken radyo etkinleştirmelerinin sayısını azaltırsınız. Sonuç olarak hem pil ömrünü uzatır hem de gecikmeyi iyileştirir, gereken bant genişliğini ve indirme sürelerini kısaltırsınız.

Ö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 de iyileştirilmiş bir kullanıcı deneyimi sağlar.

Pratik bir örnek verelim.

Haber okuyucu

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

Bu yaklaşımla radyo, kullanıcıların çoğunluğunun haber okuma oturumlarında başlıkları kaydırırken, kategorileri değiştirirken ve makaleleri okurken etkin kalmaya zorlanır. Bunun yanı sıra enerji durumları arasında sürekli geçiş yapılması, kategoriler arasında geçiş yaparken veya makaleleri okurken önemli ölçüde gecikmeye neden olur.

Başlangıçta makul miktarda veriyi önceden getirmek, ilk haber başlığı ve küçük resim grubundan başlayıp düşük gecikmeli bir başlatma süresi sağlamak ve kalan başlıklar ve küçük resimlerin yanı sıra her makalenin en azından birincil başlık listesinde bulunan makale metniyle devam etmek daha iyi bir yaklaşımdır.

Diğer bir alternatif de her başlığı, küçük resmi, makale metnini ve hatta muhtemelen tam makale resimlerini önceden getirmektir. Bu, genellikle önceden belirlenmiş bir plana göre arka plandadır. Bu yaklaşım, hiç kullanılmamış içeriğin indirilmesi için önemli miktarda bant genişliği ve pil ömrü harcanma riski taşıdığından dikkatli bir şekilde uygulanmalıdır.

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

Verileri önceden getirme birçok avantaj sağlasa da önceden çok agresif bir şekilde kullanmak, kullanılmayan verileri indirerek pil tüketimini ve bant genişliği kullanımının yanı sıra indirme kotasını da artırma riskini de beraberinde getirir. Ayrıca, uygulama önceden getirme işleminin tamamlanmasını beklerken önceden getirmenin, uygulamanın başlatılmasını geciktirmediğinden emin olmak da önemlidir. Pratikte verilerin kademeli olarak işlenmesi veya uygulama başlatma için gereken verilerin önce indirilip işlenmesine göre öncelik verilen ardışık aktarımların başlatılması anlamına gelebilir.

Verileri önceden getirme kapasiteniz, indirilen verilerin boyutuna ve kullanılma olasılığına bağlıdır. Daha önce açıklanan durum makinesine dayanarak, geçerli kullanıcı oturumunda kullanılma olasılığı% 50 olan veriler için kabaca bir kılavuz olarak, kullanılmayan verileri indirmenin potansiyel maliyeti, başlangıçta bu verilerin indirilmesinin sağlayacağı potansiyel tasarrufla eşleşmeden önce genellikle yaklaşık 6 saniye (yaklaşık 1-2 megabayt) boyunca önceden getirme işlemi gerçekleştirebilirsiniz.

Genel anlamda, her 2-5 dakikada bir ve 1 ila 5 megabaytlık bir sıralamayla başka bir indirme işlemi başlatmanız gerekeceği şekilde verileri önceden getirmek iyi bir uygulamadır.

Bu ilkeye göre, video dosyaları gibi büyük indirmeler düzenli aralıklarla (2 ila 5 dakika) parçalar halinde indirilmelidir. Bunun için, sonraki birkaç dakika içinde yalnızca görüntülenmesi muhtemel video verileri etkin bir şekilde önceden getirilir.

Bunun bir çözümü, tam indirme işlemini yalnızca kablosuz ağa bağlıyken ve muhtemelen yalnızca cihaz şarj olurken gerçekleşecek şekilde programlamaktır. WorkManager API tam olarak bu kullanım alanını destekleyerek cihaz, geliştiricinin belirlediği, şarj etme ve kablosuz ağa bağlanma gibi kriterleri karşılayana kadar arka planda çalışmayı kısıtlamanızı sağlar.

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

Hücresel sinyal aramak mobil cihazlarda en çok güç tüketen işlemlerden biridir. Kullanıcı tarafından başlatılan istekler için en iyi uygulama, Bağlantı durumunu ve bağlantı sayacını izleme bölümünde gösterildiği gibi önce ConnectivityManager kullanarak bir bağlantıyı kontrol etmektir. Ağ yoksa uygulama, mobil radyoyu arama yapmaya zorlayarak pil tasarrufu yapabilir. Daha sonra istek, bağlantı kurulduğunda diğer isteklerle birlikte toplu olarak planlanabilir ve gerçekleştirilebilir.

Havuz bağlantıları

Toplu işleme ve önceden getirmeye ek olarak yardımcı olabilecek ek bir strateji, uygulamanızın ağ bağlantılarını toplamaktır.

Genellikle mevcut ağ bağlantılarını yeniden kullanmak, yeni bağlantılar başlatmaktan daha verimlidir. Bağlantıların yeniden kullanılması, ağın tıkanıklığa ve ilgili ağ verisi sorunlarına daha akıllıca tepki vermesine de olanak tanır.

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

Özet ve geleceğe dönük düşün

Bu bölümde, kablosuz radyo hakkında çok şey öğrendiniz ve pil tüketimini azaltırken hızlı, duyarlı bir kullanıcı deneyimi sunmak için yaygın şekilde kullanabileceğiniz bazı stratejiler öğrendiniz.

Sonraki bölümde, çoğu uygulamada yaygın olarak kullanılan üç farklı ağ etkileşimi türünü ayrıntılı olarak inceleyeceğiz. Bu türlerin her birini etkileyen faktörleri ve bu etkileşimleri verimli bir şekilde yönetmek için kullanılan modern teknikleri ve API'leri öğreneceksiniz.