Bir uygulamanın oluşturduğu ağ trafiği, cihazın pil ömrünü önemli ölçüde etkileyebilir. Bu trafiği optimize etmek için ölçmeniz ve kaynağını belirlemeniz gerekir. Ağ istekleri doğrudan bir kullanıcı işleminden, kendi uygulama kodunuzdan veya uygulamanızla iletişim kuran bir sunucudan gelebilir.
Bu konuda, ağ trafiğinizi nasıl izleyeceğiniz ve kategorilere ayıracağınız açıklanmakta, ayrıca sorunları belirleme ve çözme konusunda yol gösterici bilgiler verilmektedir.
İstekleri izlemek için Ağ Profiler'ı kullanma
Uygulamanızın ağ isteklerini izlemek için Network Profiler'ı kullanın. Uygulamanızın verileri nasıl ve ne zaman aktardığını izleyebilir, temel kodu uygun şekilde optimize edebilirsiniz.
1. Şekil. Ağ trafiğini izleme Ağ trafiği kalıbı, isteklerin önceden getirilmesi veya yüklemelerin paketlenmesiyle verimliliğin önemli ölçüde artırılabileceğini gösteriyor.
Veri aktarımlarınızın sıklığını ve her bağlantı sırasında aktarılan veri miktarını izleyerek uygulamanızın pil açısından daha verimli hale getirilebilecek alanlarını belirleyebilirsiniz. Genellikle gecikebilen kısa artışlar ararsınız.
Aktarım artışlarının nedenini daha iyi belirlemek için Traffic Stats API, belirli bir iş parçacığı içindeki bir soketten gerçekleşen veri aktarımlarını TrafficStats.setThreadStatsTag()
kullanarak etiketlemenize olanak tanır.
Bu işlevin çağrılması, belirli bir iş parçacığı için tüm trafiği otomatik olarak etiketlemez. Etiketlerin soketlere uygulanması gerekir.
İş parçacığı etiketi ayarlandıktan sonra TrafficStats.tagSocket()
ve TrafficStats.untagSocket()
simgelerini kullanarak her bir soketi manuel olarak etiketleyebilir ve etiketini kaldırabilirsiniz.
İş parçacığında bir yuva açılırsa veya bir sunucu yuvası bağlantıyı kabul ederse de etiket uygulanır.
Birden fazla iş parçacığı tarafından aynı sokete eşzamanlı erişim, ağ paketleri gönderilirken veya alınırken soketin sahip olduğu etiketi kullanır (arabelleğe alma ve yeniden iletme nedeniyle, kullanıcının verileri yazdığı veya okuduğu zamandan farklı olabilir).
Örneğin, aşağıdaki kod örneğinde gösterildiği gibi farklı ağ trafiği türlerini temsil eden sabitler tanımlayabilirsiniz:
Kotlin
const val USER_INITIATED = 0x1000 const val APP_INITIATED = 0x2000 const val SERVER_INITIATED = 0x3000
Java
public static final int USER_INITIATED = 0x1000; public static final int APP_INITIATED = 0x2000; public static final int SERVER_INITIATED = 0x3000;
Ardından, ağ isteklerinizi buna göre etiketleyebilirsiniz:
Kotlin
TrafficStats.setThreadStatsTag(USER_INITIATED) TrafficStats.tagSocket(outputSocket) // Transfer data using socket TrafficStats.untagSocket(outputSocket)
Java
TrafficStats.setThreadStatsTag(USER_INITIATED); TrafficStats.tagSocket(outputSocket); // Transfer data using socket TrafficStats.untagSocket(outputSocket);
HttpURLConnection
kitaplığı, soketleri geçerli TrafficStats.getThreadStatsTag()
değerine göre otomatik olarak etiketler. Kitaplık, aşağıdaki kod örneğinde gösterildiği gibi, keep-alive havuzları aracılığıyla geri dönüştürüldüğünde soketleri etiketler ve etiketlerini kaldırır:
Kotlin
class IdentifyTransferSpikeTask { @WorkerThread fun request(url: String) { TrafficStats.setThreadStatsTag(APP_INITIATED) // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag() } }
Java
public class IdentifyTransferSpikeTask { @WorkerThread public void request(String url) { TrafficStats.setThreadStatsTag(APP_INITIATED); // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag(); } }
Ağ trafiği türlerini analiz etme
Uygulamanızın oluşturduğu ağ trafiğine baktığınızda, trafiği uygun şekilde optimize edebilmek için kaynağını anlamanız gerekir. Uygulamanızın oluşturduğu sık ağ etkinliği, kullanıcı işlemlerine yanıt veriyorsa tamamen uygun olabilir ancak uygulamanız ön planda değilse veya cihaz bir cepte ya da çantadaysa tamamen uygunsuz olabilir.
Kullanıcı tarafından başlatılan trafiği analiz etme
Kullanıcı tarafından başlatılan ağ trafiği, kullanıcı uygulamanızda belirli bir görevi yerine getirirken verimli bir şekilde gruplandırılabilir veya kullanıcı, uygulamanızın alması gereken ek bilgiler isterken eşit olmayan bir şekilde dağıtılabilir. Kullanıcı tarafından başlatılan ağ trafiğini analiz etme amacınız, zaman içinde sık ağ kullanımının kalıplarını aramak ve istekleri birlikte gruplandırarak sıklıklarını azaltmaya çalışmaktır.
Kullanıcı isteklerinin tahmin edilemez olması, uygulamanızda bu tür ağ kullanımını optimize etmeyi zorlaştırır. Ayrıca, kullanıcılar bir uygulamayı aktif olarak kullanırken hızlı yanıtlar bekler. Bu nedenle, verimlilik için istekleri geciktirmek kötü kullanıcı deneyimlerine yol açabilir. Genel olarak, kullanıcı uygulamanızla doğrudan etkileşim kurarken ağın verimli kullanımından ziyade kullanıcıya hızlı yanıt vermeye öncelik vermelisiniz.
Kullanıcı tarafından başlatılan trafiği optimize etme önerileri için Kullanıcı tarafından başlatılan istekleri optimize etme başlıklı makaleyi inceleyin.
Uygulama tarafından başlatılan trafiği analiz etme
Uygulama tarafından başlatılan ağ trafiği, genellikle ağ bant genişliğinin verimli kullanımı üzerinde önemli bir etkiye sahip olabileceğiniz bir alandır. Uygulamanızın ağ etkinliğini analiz ederken etkinliksizlik dönemlerini arayın ve bu dönemlerin uzatılıp uzatılamayacağını belirleyin. Uygulamanızdan tutarlı ağ erişimi kalıpları görüyorsanız cihaz radyosunun etkinlik dönemleri arasında düşük güç moduna geri dönmesini sağlamak için bu trafiği toplu olarak göndermeyi deneyin.
Uygulama tarafından başlatılan trafiği optimize etme önerileri için Uygulama tarafından başlatılan istekleri optimize etme başlıklı makaleyi inceleyin.
Sunucu tarafından başlatılan trafiği analiz etme
Uygulamanızla iletişim kuran sunucular tarafından başlatılan ağ etkinliği de genellikle ağ bant genişliğinin verimli kullanımı üzerinde önemli bir etkiye sahip olabileceğiniz bir alandır. Firebase Cloud Messaging (FCM), verileri bir sunucudan belirli bir uygulama örneğine iletmek için kullanılan basit bir mekanizmadır. FCM'yi kullanarak sunucunuz, belirli bir cihazda çalışan uygulamanızı yeni veriler olduğu konusunda bilgilendirebilir.
Sunucu tarafından başlatılan trafiği optimize etme önerileri için Sunucu tarafından başlatılan istekleri optimize etme başlıklı makaleyi inceleyin.
Ağ trafiği etkilerini görselleştirmek için Pil Geçmişi'ni kullanma
Battery Historian, bir cihazın belirli bir süre içindeki pil tüketimini görselleştiren bir araçtır. Ağ etkinliğinizin pil tüketimini nasıl etkilediğini analiz etmek için bu aracı kullanabilirsiniz. Örneğin, Battery Historian, uygulamanızın hücresel radyoyu beklediğinizden daha sık kullanıp kullanmadığını gösterebilir. Pil Geçmişi'ni kullanma hakkında daha fazla bilgi için Batterystats ve Pil Geçmişi ile pil kullanımını profilleme başlıklı makaleye bakın.