Bir uygulama tarafından oluşturulan 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 kategorize edeceğiniz açıklanmakta, ayrıca sorunları tespit etme ve çözme konusunda yol gösterici bilgiler verilmektedir.
İstekleri izlemek için Ağ Profilleyici'yi kullanma
Uygulamanızın ağ isteklerini izlemek için Ağ Profilleyici'yi kullanın. Uygulamanızın verileri nasıl ve ne zaman aktardığını izleyebilir ve temel kodu uygun şekilde optimize edebilirsiniz.
Veri aktarımlarınızın sıklığını ve her bağlantı sırasında aktarılan veri miktarını izleyerek uygulamanızda daha fazla pil tasarrufu sağlayabileceğiniz alanları belirleyebilirsiniz. Genellikle geciktirilebilir kısa artışlar ararsınız.
Trafik İstatistikleri API'si, aktarım artışlarının nedenini daha iyi belirlemek için TrafficStats.setThreadStatsTag()
kullanarak belirli bir iş parçacığındaki bir soketten gerçekleşen veri aktarımlarını etiketlemenize olanak tanır.
Bu işlevin çağrılması, belirli bir iş parçacığına ait tüm trafiği otomatik olarak etiketlemez. Etiketlerin soketlere uygulanması gerekir.
Mesaj dizisi etiketi ayarlandıktan sonra TrafficStats.tagSocket()
ve TrafficStats.untagSocket()
simgesini kullanarak soketlerin etiketini manuel olarak ekleyebilir ve kaldırabilirsiniz.
Mesaj dizisinde bir yuva açılırsa veya sunucu yuvası bir bağlantıyı kabul ederse de etiket uygulanır.
Birden fazla iş parçacığı tarafından aynı sokete eşzamanlı erişim sağlandığında, ağ paketleri gönderilirken veya alınırken soketteki etiket kullanılır (bu etiket, arabelleğe alma ve yeniden yayınlama 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 edecek 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 uygun şekilde 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ığı, mevcut TrafficStats.getThreadStatsTag()
değerine göre soketleri otomatik olarak etiketler. Kitaplık, aşağıdaki kod örneğinde gösterildiği gibi soketleri, tutma havuzları aracılığıyla geri dönüştürüldüğünde 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 tarafından oluşturulan ağ trafiğine baktığınızda, trafiği uygun şekilde optimize edebilmek için trafiğin kaynağını anlamanız gerekir. Uygulamanız tarafından oluşturulan sık ağ etkinliği, kullanıcı işlemlerine yanıt veriyorsa tamamen uygun olabilir ancak uygulamanız ön planda değilse veya cihaz 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 gerçekleştirirken verimli bir şekilde gruplandırılabilir veya kullanıcı uygulamanızın alması gereken ek bilgileri talep ederken eşit olmayan şekilde dağıtılabilir. Kullanıcı tarafından başlatılan ağ trafiğini analiz ederken amacınız, zaman içinde sık ağ kullanımı kalıplarını aramak ve istekleri gruplandırarak sıklığını azaltmaya çalışmaktır.
Kullanıcı isteklerinin öngörülemez olması, uygulamanızda bu tür ağ kullanımını optimize etmeyi zorlaştırır. Ayrıca, kullanıcılar bir uygulamayı etkin bir şekilde kullanırken hızlı yanıtlar bekler. Bu nedenle, verimlilik için isteklerin geciktirilmesi kötü kullanıcı deneyimlerine neden olabilir. Genel olarak, kullanıcı doğrudan uygulamanızla etkileşimde bulunurken ağa verimli bir şekilde kullanım yerine kullanıcıya hızlı yanıt vermeye öncelik vermelisiniz.
Kullanıcı tarafından başlatılan trafiği optimize etmeyle ilgili öneriler 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 etki yaratabileceğiniz bir alandır. Uygulamanızın ağ etkinliğini analiz ederken etkin olmayan dönemleri arayın ve bu dönemlerin artırılıp artırı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önmesine izin vermek için bu trafiği gruplandırmayı deneyin.
Uygulama tarafından başlatılan trafiği optimize etmeyle ilgili öneriler 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 etki yaratabileceğiniz bir alandır. Firebase Cloud Messaging (FCM), bir sunucudan belirli bir uygulama örneğine veri aktarmak için kullanılan hafif bir mekanizmadır. Sunucunuz, FCM'yi kullanarak belirli bir cihazda çalışan uygulamanızı yeni verilerin kullanılabilir olduğu konusunda bilgilendirebilir.
Sunucu tarafından başlatılan trafiği optimize etmeyle ilgili öneriler 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 dönemdeki pil tüketimini görselleştiren bir araçtır. Bu aracı kullanarak ağ etkinliğinizin pil tüketimini nasıl etkilediğini analiz edebilirsiniz. Ö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ı makaleyi inceleyin.