Verileri aktarmak için kablosuz radyo kullanmak, uygulamanızın pil tüketimindeki en önemli kaynaklardan biri olabilir. 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 durum makinesi tanıtılmakta ve uygulamanızın bağlantı modelinin bu makineyle nasıl etkileşim kurduğu açıklanmaktadır. Ardından, uygulandığında 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ünü en aza indirmeye yardımcı olan yerleşik güç tasarrufu özelliklerine sahiptir. Tamamen etkin olduğunda kablosuz radyo önemli miktarda güç tüketir ancak etkin olmadığında veya bekleme modundayken çok az güç tüketir.
Unutulmaması gereken önemli bir faktör, radyonun bekleme modundan tamamen etkin moda anında geçemeyeceğidir. Radyonun "açılması" ile ilişkili bir gecikme süresi vardır. Bu nedenle, kullanılmadığı zamanlarda güç tasarrufu yapmak için pil, daha yüksek enerji durumlarından daha düşük enerji durumlarına yavaşça geçerken radyoyu "açma" ile ilişkili gecikmeyi en aza indirmeye çalışır.
Tipik bir 3G ağ radyosunun durum makinesi üç enerji durumundan oluşur:
- Tam güç: Bağlantı etkin olduğunda kullanılır. Cihazın verileri mümkün olan en yüksek hızda aktarmasına olanak tanır.
- Düşük güç: Pil gücü tüketimini yaklaşık %50 oranında azaltan ara durum.
- Bekleme: Ağ bağlantısının etkin olmadığı, minimum güç tüketiminin gerçekleştiği durum.
Düşük ve bekleme durumları önemli ölçüde daha az pil tüketse de ağ isteklerinde önemli gecikmelere neden olur. Düşük güç durumundan tam güce dönmek yaklaşık 1,5 saniye, bekleme modundan tam güce geçmek ise 2 saniyeden uzun sürebilir.
Durum makinesi, gecikmeyi en aza indirmek için geçişi daha düşük enerji durumlarına ertelemek üzere bir gecikme kullanır. Şekil 1'de tipik bir 3G radyo için AT&T'nin zamanlamaları kullanılmaktadır.
1. Şekil. Tipik 3G kablosuz radyo durum makinesi.
Her cihazdaki radyo durum makinesi, özellikle ilişkili geçiş gecikmesi ("kuyruk süresi") ve başlatma gecikmesi, kullanılan kablosuz radyo teknolojisine (3G, LTE, 5G vb.) bağlı olarak 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 bir 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 internette gezinirken istenmeyen gecikmeleri önlediği için özellikle tipik mobil web'de gezinme için etkilidir. Kuyruk süresinin nispeten kısa olması, bir göz atma oturumu sona erdiğinde radyonun daha düşük enerji durumuna geçmesini de sağlar.
Ancak bu yaklaşım, uygulamaların hem ön planda (gecikmenin önemli olduğu yer) hem de arka planda (pil ömrünün öncelikli olması gereken yer) çalıştığı Android gibi modern akıllı telefon işletim sistemlerinde verimsiz uygulamalara yol açabilir.
Uygulamaların radyo durum makinesi üzerindeki etkisi
Yeni bir ağ bağlantısı oluşturduğunuz her seferde radyo tam güç durumuna geçer. Daha önce açıklanan tipik 3G radyo durum makinesi örneğinde, aktarımınız süresince tam güçte kalır. Ardından 5 saniye daha kuyruk süresi eklenir ve 12 saniye boyunca düşük enerji durumunda kalır. Bu nedenle, tipik bir 3G cihazda her veri aktarımı oturumu, radyonun en az 18 saniye boyunca enerji çekmesine neden olur.
Uygulamada bu, bir saniyelik veri aktarımı yapan bir uygulamanın, kablosuz radyoyu sürekli etkin tutacağı ve bekleme moduna girerken tekrar yüksek güce geçireceği anlamına gelir.
Şekil 2. Bir saniyelik aktarımın her dakika üç kez çalıştırılması için kullanılan göreceli kablosuz radyo gücü. Bu rakam, koşular arasındaki "güçlenme" gecikmesini hariç tutar.
Buna karşılık, aynı uygulama veri aktarımlarını paketleyip her dakika üç saniyelik tek bir aktarım gerçekleştirse radyo, her dakika toplamda yalnızca 20 saniye boyunca yüksek güç durumunda kalır. Bu sayede radyo, her dakikanın 40 saniyesinde beklemede kalır ve pil tüketiminde önemli bir azalma sağlanır.
3.Şekil Üç saniyelik aktarımlar için göreceli kablosuz radyo gücü kullanımı (dakikada bir kez çalışır).
Optimizasyon teknikleri
Ağ erişiminin pil ömrünü nasıl etkilediğini öğrendiğinize göre, şimdi de pil tüketimini azaltırken hızlı ve akıcı bir kullanıcı deneyimi sağlamak için yapabileceğiniz birkaç şeyden bahsedelim.
Paket veri aktarımları
Önceki bölümde belirtildiği gibi, veri aktarımlarınızı gruplandırarak daha az sıklıkta daha fazla veri aktarmak pil verimliliğini artırmanın en iyi yollarından biridir.
Elbette, uygulamanızın bir kullanıcı işlemine yanıt olarak verileri hemen alması veya göndermesi gerekiyorsa bu her zaman mümkün olmayabilir. Bu durumu, verileri önceden getirerek tahmin edip önleyebilirsiniz. Günlükleri veya analizleri bir sunucuya gönderme ve diğer acil olmayan uygulama tarafından başlatılan veri aktarımları gibi diğer senaryolar, toplu işleme ve paketlemeye çok uygundur. Arka planda ağ aktarımlarını planlama ile ilgili ipuçları için Uygulama tarafından başlatılan görevleri optimize etme başlıklı makaleyi inceleyin.
Verileri önceden getirme
Verileri önceden getirme, uygulamanızın çalıştırdığı bağımsız veri aktarımı oturumlarının sayısını azaltmanın bir başka etkili yoludur. Önceden getirme sayesinde, kullanıcı uygulamanızda bir işlem yaptığında uygulama, bir sonraki kullanıcı işlemleri dizisi için hangi verilere ihtiyaç duyulacağını tahmin eder ve bu verileri tek bir bağlantı üzerinden tam kapasiteyle tek bir seferde getirir.
Aktarımlarınızı önceden yükleyerek verileri indirmek için gereken radyo etkinleştirme sayısını azaltırsınız. Sonuç olarak, yalnızca pil ömrünü korumakla kalmaz, aynı zamanda gecikmeyi iyileştirir, gereken bant genişliğini azaltır ve indirme sürelerini kısaltırsınız.
Önceden getirme, bir işlem gerçekleştirmeden veya verileri görüntülemeden önce indirme işlemlerinin tamamlanmasını beklemekten kaynaklanan uygulama içi gecikmeyi en aza indirerek kullanıcı deneyimini de iyileştirir.
Pratik bir örnek verelim.
Haber okuyucu
Birçok haber uygulaması, yalnızca bir kategori seçildikten sonra başlıkları, yalnızca kullanıcı okumak istediğinde tam makaleleri ve yalnızca kaydırarak görüntülediğinde küçük resimleri indirerek bant genişliğini azaltmaya çalışır.
Bu yaklaşım kullanıldığında, kullanıcılar başlıklar arasında gezinirken, kategorileri değiştirirken ve makaleleri okurken radyo, haber okuma oturumunun büyük bir bölümünde etkin kalmaya zorlanır. Bununla da kalmayıp enerji durumları arasında sürekli geçiş yapılması, kategoriler arasında geçiş yaparken veya makale okurken önemli gecikmelere neden olur.
Daha iyi bir yaklaşım, başlangıçta makul miktarda veriyi önceden getirmektir. Bu işlem, ilk haber başlıkları ve küçük resim grubuyla başlar (düşük gecikmeli bir başlangıç süresi sağlar) ve kalan başlıklar, küçük resimler ve en azından birincil başlık listesinde bulunan her makalenin makale metniyle devam eder.
Bir diğer alternatif ise her başlığı, küçük resmi, makale metnini ve hatta muhtemelen tam makale resimlerini önceden getirmektir. Bu işlem genellikle önceden belirlenmiş bir programa göre arka planda yapılır. Bu yaklaşım, hiç kullanılmayan içeriklerin indirilmesi nedeniyle önemli ölçüde bant genişliği ve pil ömrü harcama riski taşır. Bu nedenle dikkatli bir şekilde uygulanmalıdır.
Değerlendirebileceğiniz diğer hususlar
Veri önceden getirme birçok avantaj sunsa da çok agresif bir şekilde kullanıldığında, kullanılmayan verileri indirerek pil tüketimini ve bant genişliği kullanımını (indirme kotasıyla birlikte) artırma riski de oluşturur. Ayrıca, uygulama önceden getirme işleminin tamamlanmasını beklerken önceden getirmenin uygulamanın başlatılmasını geciktirmediğinden emin olmanız da önemlidir. Pratikte bu, verilerin aşamalı olarak işlenmesi veya uygulamanın başlatılması için gereken verilerin önce indirilip işlenmesi amacıyla önceliklendirilmiş ardışık aktarımların başlatılması anlamına gelebilir.
Verileri ne kadar agresif bir şekilde önceden getireceğ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 göre, mevcut kullanıcı oturumunda kullanılma olasılığı% 50 olan veriler için, kullanılmayan verileri indirmenin olası maliyeti bu verileri hiç indirmemenin olası tasarrufuna eşit olana kadar yaklaşık 6 saniye (yaklaşık 1-2 megabayt) önceden getirme işlemi yapabilirsiniz.
Genel olarak, verileri önceden getirmek iyi bir uygulamadır. Bu sayede, her 2-5 dakikada bir 1-5 megabaytlık başka bir indirme başlatmanız gerekir.
Bu ilkeye göre, video dosyaları gibi büyük indirmeler düzenli aralıklarla (2-5 dakikada bir) parçalar halinde indirilmelidir. Bu sayede, yalnızca önümüzdeki birkaç dakika içinde görüntülenmesi muhtemel video verileri etkili bir şekilde önceden getirilir.
Çözümlerden biri, tam indirme işleminin yalnızca kablosuz ağa bağlıyken ve muhtemelen yalnızca cihaz şarj olurken gerçekleşecek şekilde planlanmasıdır. WorkManager API, tam olarak bu kullanım alanını destekler. Bu API, cihaz geliştirici tarafından belirtilen ölçütleri (ör. şarj etme ve kablosuz ağa bağlanma) karşılayana kadar arka plan çalışmasını kısıtlamanıza olanak tanır.
İstek göndermeden önce bağlantıyı kontrol etme
Hücre sinyali arama, mobil cihazlarda en çok güç tüketen işlemlerden biridir. Kullanıcı tarafından başlatılan isteklerle ilgili en iyi uygulama, ConnectivityManager
kullanarak bağlantı olup olmadığını kontrol etmektir. Bu işlem, Bağlantı durumunu ve bağlantı ölçümünü izleme başlıklı makalede gösterilmiştir.
Ağ yoksa uygulama, mobil radyoyu aramaya zorlamayarak pil tasarrufu sağlayabilir. Daha sonra bağlantı kurulduğunda istek planlanabilir ve diğer isteklerle birlikte toplu olarak gerçekleştirilebilir.
Havuz bağlantıları
Toplu işleme ve önceden getirmeye ek olarak yardımcı olabilecek bir diğer strateji de uygulamanızın ağ bağlantılarını birleştirmektir.
Genel olarak, yeni ağ bağlantıları başlatmak yerine mevcut ağ bağlantılarını yeniden kullanmak daha verimlidir. Bağlantıların yeniden kullanılması, ağın tıkanıklığa ve ilgili ağ verileri 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 fazla istek için aynı bağlantıyı yeniden kullanır.
Özet ve geleceğe bakış
Bu bölümde, kablosuz radyo ve pil tüketimini azaltırken hızlı ve duyarlı bir kullanıcı deneyimi sağlamak için geniş kapsamda uygulayabileceğiniz bazı stratejiler hakkında çok şey öğrendiniz.
Bir 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 birinin itici güçlerini ve bu etkileşimleri verimli bir şekilde yönetmek için modern teknikleri ve API'leri öğreneceksiniz.