Ağ erişimini optimize edin

Veri aktarmak için kablosuz radyoyu kullanmak, uygulamanızın pil tüketimini artıran 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ılır ve uygulamanızın bağlantı modelinin bu makineyle nasıl etkileşime geçtiği açıklanı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ü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.

Radyonun bekleme modundan tam etkin moda anında geçemeyeceğini unutmayın. Radyonun "açılması" ile ilişkili bir gecikme süresi vardır. Bu nedenle pil, kullanılmadığında güç tasarrufu yapmak için 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ı etkinken 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üç tüketimini yaklaşık %50 oranında azaltan ara durum.
  • Bekleme: Ağ bağlantısının etkin olmadığı, minimum güç tüketimi yapılan durum.

Düşük ve bekleme durumları, pil tüketimini önemli ölçüde azaltsa da ağ isteklerinde önemli gecikmeler de oluşturur. Düşük güç durumundan tam güce dönmek yaklaşık 1,5 saniye, bekleme durumundan 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 üzere bir gecikme kullanır. Şekil 1'de, AT&T'nin tipik bir 3G radyo için kullandığı zamanlamalar kullanılmaktadır.


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

Her cihazdaki radyo durum makinesi, özellikle ilişkili geçiş gecikmesi ("son zaman") 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 bir durum makinesi açıklanmaktadır. Ancak genel ilkeler ve bunlardan çı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ğinden özellikle tipik mobil web taramalarında etkilidir. Nispeten düşük sonlandırma süresi, bir tarama oturumu sona erdiğinde radyonun daha düşük bir enerji durumuna geçebilmesini de sağlar.

Maalesef 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ığı, 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 makinesi, aktarma süreniz boyunca ve ek 5 saniyelik son süre boyunca tam güçte kalır. Ardından, düşük enerji durumunda 12 saniye daha çalışır. Bu nedenle, tipik bir 3G cihazda her veri aktarma 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 olarak etkin tutacağı ve tam da bekleme moduna girerken yüksek güce geri döndüreceği anlamına gelir.


Şekil 2. Dakikada üç kez yapılan bir saniyelik aktarım için göreli kablosuz radyo gücü kullanımı. Şekilde, çalıştırmalar arasındaki "açma" gecikmesi hariç tutulmuştur.

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 sayede radyo her dakikanın 40 saniyesini bekleme modunda geçirir ve pil tüketimi önemli ölçüde azalır.


Şekil 3. Dakikada bir gerçekleşen üç 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 anladığınıza göre, hem pil tüketimini azaltmaya hem de hızlı ve akıcı bir kullanıcı deneyimi sunmaya yardımcı olmak için yapabileceğiniz birkaç şeyden bahsedelim.

Paket halinde veri aktarımı

Ö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. Bu sorunu, verileri önceden tahmin edip ön besleyerek 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 gruplandırma 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 getirme, uygulamanızın çalıştırdığı bağımsız veri aktarım oturumlarının sayısını azaltmanın etkili bir başka yoludur. Ön getirme özelliği sayesinde, kullanıcı uygulamanızda bir işlem gerçekleştirdiğinde uygulama, bir sonraki kullanıcı işlemi serisi için büyük olasılıkla hangi verilere ihtiyaç duyulacağını tahmin eder ve bu verileri tek bir bağlantı üzerinden tek seferde, tam kapasitede getirir.

Aktarımlarınızı önceden 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.

Ön 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 daha iyi bir kullanıcı deneyimi sağlar.

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

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ırma sırasında görünen küçük resimleri indirerek bant genişliğini azaltmaya çalışır.

Bu yaklaşımı kullanarak radyo, kullanıcılar başlıklar arasında gezinirken, kategori değiştirirken ve makale okurken haber okuma oturumlarının çoğunda etkin kalmalıdı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 gecikmelere neden olur.

Daha iyi bir yaklaşım, ilk haber başlıkları ve küçük resimlerinden başlayarak (düşük gecikmeli bir başlangıç süresi sağlamak için) ve kalan başlıklar ve küçük resimlerle devam ederek (ayrıca en azından birincil başlık listesinden her makalenin makale metnini) başlangıçta makul miktarda veri ön beslemektir.

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

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

Veri ön getirmenin birçok avantajı olsa da çok agresif bir şekilde kullanıldığında, kullanılmayan verileri indirerek pil tüketimini ve bant genişliği kullanımını (ayrıca indirme kotasını) artırma riski de getirir. Ayrıca, uygulama ön getirmenin tamamlanmasını beklerken ön getirme işleminin uygulamanın başlatılmasını geciktirmediğinden emin olmanız 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 dayalı olarak, kabaca bir kılavuz olarak, mevcut kullanıcı oturumunda kullanılma olasılığı% 50 olan veriler için, kullanılmayan verileri indirmenin potansiyel maliyeti bu verileri indirmemekten elde edilecek potansiyel tasarrufla eşleşmeden önce genellikle yaklaşık 6 saniye (yaklaşık 1-2 megabayt) ön getirme yapabilirsiniz.

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 dakikada bir) parçalara ayrılarak indirilmeli ve yalnızca önümüzdeki birkaç dakika içinde görüntülenecek video verileri etkili bir şekilde önceden getirilmelidir.

Bir çözüm, indirme işleminin tamamını 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. Böylece, cihaz geliştirici tarafından belirtilen şarj etme ve kablosuz ağa bağlanma gibi ölçütleri karşılayana kadar arka planda çalışmayı kısıtlayabilirsiniz.

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

Hücre sinyali aramak, mobil cihazlarda en fazla 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 zorlayarak pil tasarrufu sağlayabilir. Ardından, bağlantı oluşturulduğ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 ek bir strateji, uygulamanızın ağ bağlantılarını toplamaktır.

Mevcut ağ bağlantılarını yeniden kullanmak genellikle 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, bağlantı havuzunu varsayılan olarak etkinleştirir ve aynı bağlantıyı birden fazla istek için yeniden kullanır.

Özet ve gelecek planları

Bu bölümde kablosuz radyo ve pil tüketimini azaltırken hızlı, duyarlı bir kullanıcı deneyimi sunmak için yaygın olarak uygulayabileceğiniz bazı stratejiler hakkında çok şey öğ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 birinin sürücülerini, ayrıca bu etkileşimleri verimli bir şekilde yönetmeye yönelik modern teknikleri ve API'leri öğreneceksiniz.