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. Tam olarak etkinken kablosuz radyo önemli miktarda güç tüketir ancak etkin değilken veya bekleme modundayken çok az güç tüketir.
Radyonun bekleme modundan tam etkin moda anında geçemeyeceğini unutmayın. Radyonun "açma/kapatma" işlemiyle 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.
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 söz konusu olduğunda, aktarım süreniz boyunca ve ek 5 saniyelik son süre boyunca tam güçte kalır ve 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.
Buna karşılık, aynı uygulama veri aktarımlarını gruplandırarak her dakika tek bir üç saniyelik aktarım yaparsa radyo her dakika toplam yalnızca 20 saniye boyunca yüksek güç durumunda kalır. Bu sayede radyo her dakikanın 40 saniyesini bekleme modunda geçirir ve pil tüketimi önemli ölçüde azalır.
Optimizasyon teknikleri
Ağ erişiminin pil ömrünü nasıl etkilediğini anladığınıza göre, pil tüketimini azaltırken hızlı ve akıcı bir kullanıcı deneyimi sunmak için yapabileceğiniz birkaç şeyden bahsedelim.
Paket halinde veri aktarımı
Önceki bölümde belirtildiği gibi, daha az sıklıkta daha fazla veri aktarmak için veri aktarımlarınızı 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 bunu her zaman yapamazsınız. 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ı planlamayla ilgili ipuçları için Uygulama tarafından başlatılan görevleri optimize etme başlıklı makaleyi inceleyin.
Verileri ön 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ğiyle, 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. Bu sayede yalnızca pil ömrünü korumakla kalmaz, gecikmeyi iyileştirir, gerekli bant genişliğini düşürür 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. Bununla birlikte, enerji durumları arasında sürekli geçiş yapmak, kategori değiştirirken veya makale okurken önemli 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 bu, verileri kademeli olarak işlemek veya uygulamanın başlatılması için gereken verilerin önce indirilip işlenmesi amacıyla öncelikli olarak art arda aktarım başlatmak anlamına gelebilir.
Verileri ne kadar agresif bir şekilde ön beslediğiniz, 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 genellikle kullanılmayan verileri indirmenin potansiyel maliyeti, bu verileri indirmemekten elde edilecek potansiyel tasarrufla eşleşmeden önce yaklaşık 6 saniye (yaklaşık 1-2 megabayt) ön getirme yapabilirsiniz.
Genel olarak, verileri önceden önbelleğe almak iyi bir uygulamadır. Böylece, yalnızca 2 ila 5 dakikada bir başka indirme işlemi başlatmanız ve 1 ila 5 megabaytlık veri indirmeniz gerekir.
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.
İstek göndermeden önce bağlantı olup olmadığını 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ı
Gruplandırma ve ön getirmenin yanı sıra yardımcı olabilecek ek bir strateji de uygulamanızın ağ bağlantılarını bir araya getirmektir.
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ğ veri 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 aynı bağlantıyı birden fazla istek için yeniden kullanır.
Özet ve geleceğe bakış
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.
Bir sonraki bölümde, çoğu uygulamada ortak olan üç 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.