Kullanıcı Android cihazını kullanmayı bıraktığında, pilin tükenmesini önlemek için cihaz hızlı bir şekilde askıya alma durumuna geçer. Ancak bazı durumlarda uygulamanın CPU'nun askıya alma durumuna geçmesini önlemesi gerekir. Bazı durumlarda, uygulamanın çalışırken ekranı açık tutması gerekebilir. Diğer durumlarda, uygulamanın ekranı açık tutması gerekmez ancak CPU'nun etkin olması gerekir.
Uygulayacağınız yaklaşım, uygulamanızın ihtiyaçlarına bağlıdır. Ancak genel bir kural olarak, uygulamanızın sistem kaynakları üzerindeki etkisini en aza indirmek için mümkün olan en hafif yaklaşımı kullanmanız gerekir. Bu doküman, durumunuza uygun Android teknolojisini seçmenize yardımcı olur.
Doğru teknolojiyi seçme
Cihazınızın uyanık kalması için en iyi seçenek, uygulamanızın ihtiyaçlarına bağlıdır. Bu bölüm, doğru yaklaşımı seçmenize yardımcı olur.
- Uygulamanızın ekranı açık tutması gerekiyor mu?
- Yanıtınız Evet ise Ekranı açık tutma bölümüne bakın. İhtiyacınız olan işlevi yerine getiren özel amaçlı bir API olabilir. Örneğin, telefon görüşmesi kullanıcı arayüzü uyguluyorsanız gerektiğinde ekranı açık tutan Android telekom çerçevesini kullanabilirsiniz. Durumunuza özel bir API yoksa
keepScreenOn
API'yi kullanabilirsiniz.
- Yanıtınız Evet ise Ekranı açık tutma bölümüne bakın. İhtiyacınız olan işlevi yerine getiren özel amaçlı bir API olabilir. Örneğin, telefon görüşmesi kullanıcı arayüzü uyguluyorsanız gerektiğinde ekranı açık tutan Android telekom çerçevesini kullanabilirsiniz. Durumunuza özel bir API yoksa
- Uygulamanız bir ön plan hizmeti mi çalıştırıyor ve hizmet çalışırken ekran kapalıyken cihazı uyanık tutmanız mı gerekiyor?
- Yanıtınız Hayır ise cihazı uyanık tutmanıza gerek yoktur. Kullanıcı uygulamayla etkin bir şekilde etkileşim kuruyorsa cihaz uyanık kalır. Kullanıcı uygulamanızla etkileşimde bulunmuyorsa ve ön planda bir hizmet çalıştırılmıyorsa gerektiğinde cihazın askıya alma moduna geçmesine izin vermeniz gerekir. Kullanıcı uygulamadan uzakken bazı işlerin yapılmasını sağlamanız yeterliyse en iyi seçeneği bulmak için arka plan görevleri dokümanını inceleyin.
- Yanıtınız Evet ise öncelikle ön plan hizmeti kullanmanız gerektiğini onaylayın. Durumunuza bağlı olarak, ön plan hizmeti yerine ihtiyacınızı karşılamak için kullanabileceğiniz bazı özel amaçlı API'ler olabilir.
Bu bilgilere Ön Plan Hizmeti dokümanlarında ulaşabilirsiniz. Örneğin, kullanıcının konumunu izlemeniz gerekiyorsa
location
ön plan hizmeti yerine coğrafi sınırlama API'sini kullanabilirsiniz.
- Ön plan hizmeti çalışırken ve cihaz ekranı kapalıyken cihazın askıya alınması kullanıcı deneyimi için zararlı olur mu? (Örneğin, bildirimleri güncellemek için bir ön plan hizmeti kullanıyorsanız cihazın askıya alınması kötü bir kullanıcı deneyimi olmaz.)
- Yanıtınız Hayır ise wakelock kullanmayın. Kullanıcı cihazıyla etkileşime geçtiğinde işlem otomatik olarak devam eder ve cihaz askıya alınmış durumdan çıkar.
- Yanıtınız Evet ise uyandırma kilidi kullanmanız gerekebilir. Ancak, Cihazı uyanık tutan işlemler bölümünde açıklandığı gibi, halihazırda bir API kullanıp kullanmadığınızı veya sizin adınıza uyanma kilidi belirten bir işlem yapıp yapmadığınızı kontrol etmeniz gerekir.
Cihazı uyanık tutan işlemler
Uygulamanız aşağıdakilerden herhangi birini yapıyorsa uyanma kilidi ayarlamanıza gerek yoktur. Aşağıdaki işlemler ve API'lerin tümü cihazı sizin için açık tutar.
- Ses çalıyorsanız ses sistemi sizin için bir uyanma kilidi ayarlar ve yönetir. Bunu kendiniz yapmanız gerekmez.
- WorkManager,
JobScheduler
veyaDownloadManager
gibi görev planlama API'lerini ya da kitaplıklarını kullanıyorsanız sistem veya kitaplık sizin adınıza bir uyanık kalma kilidi edinir. - Media3 ExoPlayer kullanıyorsanız oynatıcının sizin için uyanma kilidi ayarlamasını sağlamak üzere
ExoPlayer.setWakeMode()
kullanabilirsiniz. - Belirli cihaz sensörleri uyandırıcı sensörlerdir. Bu sensörlerin, bildirecek verileri olduğunda cihazı uyandırmasını sağlamak için
SensorManager
değerini kullanabilirsiniz. Bir sensörün uyanma sensörü olup olmadığını kontrol etmek içinSensor.isWakeUpSensor
değerini çağırın.