Ağ erişimini optimize edin

Veri aktarmak için kablosuz radyo kullanmak, uygulamanızın pil tüketiminin en önemli kaynaklarından 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, 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, tam olarak etkin olduğunda önemli miktarda güç tüketir ancak etkin olmadığında veya bekleme modundayken çok az güç tüketir.

Unutulmaması gereken önemli bir nokta, radyonun bekleme modundan tam etkin moda anında geçememesidir. Radyonun "açılması" ile ilişkili bir gecikme süresi vardır. Bu nedenle pil, kullanılmadığı zamanlarda güç tasarrufu yapmak için yüksek enerji durumlarından düşük enerji durumlarına yavaşça geçer ve 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üç: 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 oranında azaltan bir ara durumdur.
  • Bekleme: Ağ bağlantısının etkin olmadığı, minimum güç tüketimi durumudur.

Düşük ve bekleme durumları çok daha az pil tüketirken 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 daha düşük enerji durumlarına geçişi 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 durum makinesi.

Her cihazdaki radyo durum 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ş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 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 web'de gezinirken istenmeyen gecikmeleri önlediği için özellikle tipik mobil web taraması için etkilidir. Nispeten kısa süreli kuyruk süresi, tarama oturumu bittikten sonra radyonun daha düşük bir enerji durumuna geçebilmesini de sağlar.

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

Uygulamalar radyo durum makinesini nasıl etkiler?

Yeni bir ağ bağlantısı oluşturduğunuzda radyo, tam güç durumuna geçer. Daha önce açıklanan tipik 3G radyo durum makinesinde, aktarımınız süresince tam güçte kalır. Ayrıca 5 saniyelik ek bir kuyruk süresi ve ardından 12 saniye boyunca düşük enerji durumunda 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 bir saniyelik veri aktarımı yapan bir uygulamanın kablosuz radyoyu sürekli etkin tutacağı ve bekleme moduna girerken tekrar yüksek güç moduna geçireceği anlamına gelir.


Şekil 2. Her dakika üç kez çalışan bir saniyelik aktarım için göreceli kablosuz radyo gücü kullanımı. Şekilde, çalıştırmalar arasındaki "güç verme" gecikmesi hariç tutulmuştur.

Buna karşılık, aynı uygulama veri aktarımlarını bir araya getirip her dakika üç saniyelik tek bir aktarım gerçekleştirirse radyo, her dakika toplamda yalnızca 20 saniye boyunca yüksek güç durumunda kalır. Bu sayede radyo her dakikanın 40 saniyesinde bekleme modunda kalır ve pil tüketimi önemli ölçüde azalır.


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

Optimizasyon teknikleri

Ağ erişiminin pil ömrünü nasıl etkilediğini öğrendiğinize göre, pil tüketimini azaltmak için yapabileceğiniz birkaç şeyden bahsedelim. Bu sayede hızlı ve akıcı bir kullanıcı deneyimi de sunabilirsiniz.

Paket veri aktarımları

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

Elbette, uygulamanızın bir kullanıcı işlemine yanıt olarak hemen veri alması veya göndermesi gerekiyorsa bu her zaman mümkün olmayabilir. Verileri önceden tahmin edip önceden getirerek bu sorunu azaltabilirsiniz. Günlükleri veya analizleri bir sunucuya gönderme ve uygulama tarafından başlatılan diğer acil olmayan veri aktarımları gibi diğer senaryolar, toplu işleme ve paketleme 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 başlıklı makaleyi inceleyin.

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 özelliğinde, kullanıcı uygulamanızda bir işlem gerçekleştirdiğinde uygulama, bir sonraki kullanıcı işlemleri dizisi için büyük olasılıkla hangi verilerin gerekli olacağını tahmin eder ve bu verileri tek bir bağlantı üzerinden tam kapasiteyle tek bir patlamada getirir.

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

Önceden getirme, bir işlem yapmadan veya verileri görüntülemeden önce indirme işlemlerinin tamamlanmasını beklemenin neden olduğu uygulama içi gecikmeyi en aza indirerek daha iyi bir kullanıcı deneyimi de sunar.

Bunu bir örnekle açıklayalım.

Haber okuyucu

Birçok haber uygulaması, yalnızca bir kategori seçildikten sonra başlıkları, yalnızca kullanıcı okumak istediğinde makalelerin tamamını ve kaydırarak görünür hale geldiklerinde 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. Ayrıca, enerji durumları arasında sürekli geçiş yapılması, kategori değiştirirken veya makale okurken önemli bir gecikmeye neden olur.

Daha iyi bir yaklaşım, başlangıçta makul miktarda veriyi önceden getirmektir. İlk haber başlıkları ve küçük resimlerle başlayarak (düşük gecikmeli bir başlangıç süresi sağlar) kalan başlıklar ve küçük resimlerin yanı sıra en azından birincil başlık listesindeki her makalenin metniyle devam edin.

Başka bir alternatif de her başlığı, küçük resmi, makale metnini ve hatta muhtemelen makale resimlerinin tamamını önceden getirmektir. Bu işlem genellikle arka planda, önceden belirlenmiş bir programa göre yapılır. Bu yaklaşım, hiç kullanılmayan içerikleri indirerek önemli ölçüde bant genişliği ve pil ömrü harcama riski taşır. Bu nedenle dikkatli bir şekilde uygulanmalıdır.

Göz önünde bulundurulacak diğer noktalar

Verileri önceden getirmenin birçok avantajı olsa da önceden getirme çok agresif bir şekilde kullanıldığında, kullanılmayan verileri indirerek pil tüketimini ve bant genişliği kullanımını (ve indirme kotasını) artırma riski de taşır. Ayrıca, uygulama önceden getirme işleminin tamamlanmasını beklerken önceden getirmenin uygulama başlatmayı geciktirmediğinden emin olmak da önemlidir. Pratik olarak bu, verilerin kademeli olarak işlenmesi veya uygulama başlatma için gereken verilerin önce indirilip işleneceği şekilde ö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. Kabaca 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 genellikle yaklaşık 6 saniye (yaklaşık 1-2 megabayt) önceden getirme yapabilirsiniz. Bu sürenin sonunda, kullanılmayan verileri indirmenin potansiyel maliyeti, bu verileri indirmemenin potansiyel tasarrufuyla eşleşir.

Genel olarak, verileri önceden getirirken yalnızca 2 ila 5 dakikada bir ve 1 ila 5 megabayt boyutunda başka bir indirme işlemi başlatmanız gerekecek şekilde ayarlamanız iyi bir uygulamadır.

Bu ilkeye göre, video dosyaları gibi büyük indirmeler düzenli aralıklarla (her 2 ila 5 dakikada bir) parçalar halinde indirilmelidir. Böylece, 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şlemini yalnızca kablosuz ağa bağlıyken ve muhtemelen yalnızca cihaz şarj olurken gerçekleşecek şekilde planlamaktır. WorkManager API, tam olarak bu kullanım alanını destekler ve cihaz, geliştirici tarafından belirtilen ölçütleri (ör. şarj olma ve kablosuz ağa bağlı olma) 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ü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ı ölçümü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 aramaya zorlamayarak pil tasarrufu yapabilir. İstek daha sonra planlanabilir ve bağlantı kurulduğunda 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ı bir araya getirmektir.

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 yoğunluğa ve ağ verileriyle ilgili sorunlara daha akıllıca tepki vermesini de sağlar.

HttpURLConnection ve OkHttp gibi çoğu HTTP istemcisi, bağlantı havuzu oluşturmayı ve birden fazla istek için aynı bağlantıyı yeniden kullanmayı varsayılan olarak etkinleştirir.

Özet ve geleceğe bakış

Bu bölümde, kablosuz radyo hakkında birçok bilgi edindiniz ve pil tüketimini azaltırken hızlı, duyarlı bir kullanıcı deneyimi sunmak için genel olarak uygulayabileceğiniz bazı stratejileri öğrendiniz.

Bir sonraki bölümde, çoğu uygulamada yaygın olarak görülen üç farklı ağ etkileşimi türünü ayrıntılı olarak inceleyeceğiz. Bu etkileşim türlerinin her birinin tetikleyicilerini ve bu etkileşimleri verimli bir şekilde yönetmek için modern teknikleri ve API'leri öğreneceksiniz.