Arka plan görevlerine genel bakış

Uygulamaların genellikle aynı anda birden fazla işlem yapması gerekir. Android API'leri bunu yapmanıza olanak tanıyan birçok farklı yöntem sunar. Doğru seçeneği belirlemek çok önemlidir. Bir seçenek, bir durum için doğruyken başka bir durum için çok yanlış olabilir. Yanlış API'leri seçmek, uygulamanızın performansına veya kaynak verimliliğine zarar verebilir. Bu da pilin bitmesine ve kullanıcının cihazının performansının genel olarak düşmesine neden olabilir. Bazı durumlarda, yanlış yaklaşımı seçmek uygulamanızın Play Store'da listelenmesini engelleyebilir.

Bu belgede, kullanabileceğiniz farklı seçenekler açıklanmakta ve durumunuza uygun seçeneği belirlemenize yardımcı olunmaktadır.

Terminoloji

Arka plan görevleriyle ilgili bazı önemli terimler, birden fazla ve çelişkili şekillerde kullanılabilir. Bu nedenle, terimlerimizi tanımlamak önemlidir.

Bir uygulama arka planda çalışıyorsa sistem, uygulamaya bir dizi kısıtlama getirir. (Örneğin, çoğu durumda arka plandaki bir uygulama ön plan hizmetlerini başlatamaz.)

Bu belgede, bir uygulamanın ana iş akışının dışında gerçekleştirdiği işlemleri ifade etmek için "görev" terimini kullanacağız. Anlaşılmasını kolaylaştırmak için görev türlerini üç ana kategoriye ayırdık: eşzamansız çalışma, görev planlama API'leri ve ön plan hizmetleri.

Doğru seçeneği belirleme

Çoğu senaryoda, görevinizin hangi kategoriye (eşzamansız çalışma, görev planlama API'leri veya ön plan hizmetleri) girdiğini belirleyerek göreviniz için kullanılacak doğru API'leri bulabilirsiniz.

Hâlâ emin değilseniz karara daha fazla ayrıntı ekleyen akış şemalarımızı kullanabilirsiniz. Bu seçeneklerin her biri, bu belgenin ilerleyen kısımlarında daha ayrıntılı olarak açıklanmıştır.

Arka plan görevleri için dikkate alınması gereken iki ana senaryo vardır:

Bu iki senaryonun kendi karar ağaçları vardır.

Eşzamansız çalışma

Çoğu durumda, bir uygulamanın yalnızca ön planda çalışırken eşzamanlı işlemler yapması gerekir. Örneğin, bir uygulamanın zaman alan bir hesaplama yapması gerekebilir. Hesaplama kullanıcı arayüzü iş parçacığında yapılsaydı kullanıcı, hesaplama tamamlanana kadar uygulamayla etkileşimde bulunamazdı. Bu durum, ANR hatasına neden olabilir. Böyle bir durumda uygulama, eşzamansız çalışma seçeneğini kullanmalıdır.

Yaygın eşzamansız çalışma seçenekleri arasında Kotlin eş yordamları ve Java iş parçacıkları yer alır. Daha fazla bilgiyi eşzamansız çalışma belgelerinde bulabilirsiniz. Arka plan görevi API'lerinin aksine, uygulama geçerli bir yaşam döngüsü aşamasında değilse (örneğin, uygulama ön plandan ayrılırsa) eşzamansız çalışmanın tamamlanmasının garanti edilmediğini unutmayın.

Görev planlama API'leri

Görev planlama API'leri, kullanıcı uygulamadan ayrılsa bile devam etmesi gereken görevleri yapmanız gerektiğinde daha esnek bir seçenektir. Çoğu durumda, arka plan görevlerini çalıştırmak için en iyi seçenek WorkManager'ı kullanmaktır ancak bazı durumlarda platformun JobScheduler API'sini kullanmak uygun olabilir.

WorkManager, ihtiyacınıza göre basit veya karmaşık işler oluşturmanıza olanak tanıyan güçlü bir kitaplıktır. WorkManager'ı kullanarak görevleri belirli zamanlarda çalışacak şekilde planlayabilir veya görevin çalıştırılması gereken koşulları belirtebilirsiniz. Hatta görev zincirleri oluşturarak her görevin sırayla çalışmasını ve sonuçlarını bir sonraki göreve aktarmasını sağlayabilirsiniz. Mevcut tüm seçenekleri anlamak için WorkManager özellik listesini inceleyin.

Arka plan görevleriyle ilgili en yaygın senaryolardan bazıları şunlardır:

  • Sunucudan düzenli olarak veri alma
  • Sensör verilerini (ör. adım sayacı verileri) alma
  • Periyodik konum verilerini alma (Android 10 veya sonraki sürümlerde ACCESS_BACKGROUND_LOCATION izni verilmiş olmalıdır)
  • Kamera tarafından oluşturulan fotoğraflar gibi bir içerik tetikleyiciye dayalı içerik yükleme

Ön plan hizmetleri

Ön plan hizmetleri, kesintiye uğramaması gereken görevleri hemen çalıştırmanın güçlü bir yolunu sunar. Ancak ön plan hizmetleri, cihazda ağır bir yüke neden olabilir ve bazen gizlilik ve güvenlik açısından sorunlara yol açabilir. Bu nedenle sistem, uygulamaların ön plan hizmetlerini nasıl ve ne zaman kullanabileceği konusunda birçok kısıtlama getirir. Örneğin, ön plan hizmeti kullanıcı tarafından fark edilebilir olmalıdır ve çoğu durumda uygulamalar arka plandayken ön plan hizmetlerini başlatamaz. Daha fazla bilgi için ön plan hizmetleri belgelerine göz atın.

Ön plan hizmeti oluşturmanın iki yöntemi vardır. Kendi Service öğenizi beyan edebilir ve Service.startForeground() yöntemini çağırarak hizmetin bir ön plan hizmeti olduğunu belirtebilirsiniz. Alternatif olarak, uzun süre çalışan worker'lar için destek bölümünde açıklandığı gibi WorkManager kitaplığını kullanarak ön plan hizmeti oluşturabilirsiniz. Ancak WorkManager tarafından oluşturulan bir ön plan hizmetinin, diğer ön plan hizmetleriyle aynı kısıtlamalara tabi olduğunu unutmayın. WorkManager, ön plan hizmeti oluşturmayı kolaylaştırmak için bazı kullanışlı API'ler sunar.

Alternatif API'ler

Sistem, daha spesifik kullanım alanlarında daha iyi performans gösterecek şekilde tasarlanmış alternatif API'ler sunar. Kullanım alanınız için alternatif bir API varsa uygulamanızın daha iyi performans göstermesine yardımcı olacağı için ön plan hizmeti yerine bu API'yi kullanmanızı öneririz. Ön plan hizmet türleri dokümanlarında, belirli bir ön plan hizmet türü yerine kullanılabilecek iyi bir alternatif API olduğunda bu durum belirtilir.

Alternatif API'lerin en yaygın kullanım alanlarından bazıları şunlardır:

Kullanıcı tarafından başlatılan görevler

Uygun API'nin nasıl seçileceğini gösteren akış şeması. Bu grafik, "Kullanıcı tarafından başlatılan görevler" bölümündeki materyali özetler.
Şekil 1: Kullanıcı tarafından başlatılan bir arka plan görevini çalıştırmak için doğru API'yi seçme

Bir uygulamanın arka plan görevleri gerçekleştirmesi gerekiyorsa ve işlem, uygulama görünür durumdayken kullanıcı tarafından başlatılıyorsa doğru yaklaşımı bulmak için bu soruları yanıtlayın.

Uygulama arka plandayken görevin çalışmaya devam etmesi gerekiyor mu?

Uygulama arka plandayken görevin çalışmaya devam etmesi gerekmiyorsa eşzamansız çalışma kullanmanız gerekir. Eşzamansız çalışma için birçok seçenek vardır. Uygulama arka plana geçerse bu seçeneklerin tümünün çalışmayı durdurduğunu anlamak önemlidir. (Uygulama kapatılırsa da durdurulur.) Örneğin, bir sosyal medya uygulaması içerik feed'ini yenilemek isteyebilir ancak kullanıcı ekrandan ayrılırsa işlemi tamamlaması gerekmez.

Görev ertelenir veya kesintiye uğrarsa kötü bir kullanıcı deneyimi yaşanır mı?

Bir görevin ertelenmesi veya iptal edilmesi durumunda kullanıcı deneyiminin zarar görüp görmeyeceğini değerlendirmek önemlidir. Örneğin, bir uygulamanın öğelerini güncellemesi gerekiyorsa kullanıcı, işlemin hemen mi yoksa gece yarısı cihaz şarj olurken mi gerçekleştiğini fark etmeyebilir. Bu gibi durumlarda arka plan çalışması seçeneklerini kullanmanız gerekir.

Kısa ve kritik bir görev mi?

Görev ertelenemiyorsa ve hızlı bir şekilde tamamlanacaksa shortService türünde bir ön plan hizmeti kullanabilirsiniz. Bu hizmetleri oluşturmak diğer ön plan hizmetlerine göre daha kolaydır ve çok fazla izin gerektirmez. Ancak kısa hizmetlerin üç dakika içinde tamamlanması gerekir.

Sadece bu amaçla kullanılabilecek alternatif bir API var mı?

Görev kullanıcı tarafından görülebiliyorsa doğru çözüm ön plan hizmeti kullanmak olabilir. Bu hizmetler başlatıldıktan sonra sürekli çalışır. Bu nedenle, görevin kesintiye uğraması kötü bir kullanıcı deneyimine yol açacaksa iyi bir seçimdir. Örneğin, antrenman takip uygulaması, kullanıcıların koşu rotalarını haritaya kaydetmelerine olanak tanımak için konum sensörlerini kullanabilir. Bunu arka plan çalışması seçeneğiyle yapmak istemezsiniz çünkü görev duraklatılırsa izleme hemen durur. Böyle bir durumda ön plan hizmeti kullanmak en mantıklı seçenektir.

Ancak ön plan hizmetleri çok fazla cihaz kaynağı kullanabileceğinden sistem, bunların ne zaman ve nasıl kullanılabileceğine dair birçok kısıtlama getirir. Çoğu durumda, ön plan hizmeti yerine işi sizin için daha az sorunla halleden alternatif bir API kullanabilirsiniz. Örneğin, uygulamanızın kullanıcı belirli bir konuma ulaştığında işlem yapması gerekiyorsa kullanıcının konumunu ön plan hizmetiyle izlemek yerine coğrafi sınır API'sini kullanmak en iyi seçenektir.

Bir etkinliğe yanıt olarak gerçekleştirilen görevler

Uygun API'nin nasıl seçileceğini gösteren akış şeması. Bu grafik, "Bir etkinliğe yanıt olarak gerçekleştirilen görevler" bölümündeki materyali özetler.
Şekil 2: Olay tetiklemeli bir arka plan görevini çalıştırmak için doğru API'yi seçme

Bazen bir uygulamanın, tetikleyiciye yanıt olarak arka planda işlem yapması gerekir. Örneğin:

Bu, harici bir tetikleyici (ör. FCM mesajı) veya uygulamanın kendisi tarafından ayarlanan bir alarma yanıt olabilir. Örneğin, bir oyun, bazı öğeleri güncellemesini söyleyen bir FCM mesajı alabilir.

Görevin birkaç saniye içinde tamamlanacağından eminseniz görevi gerçekleştirmek için eşzamansız çalışma yöntemini kullanın. Sistem, uygulamanız arka planda olsa bile bu tür görevleri gerçekleştirmesi için uygulamanıza birkaç saniye izin verir.

Görevin tamamlanması birkaç saniyeden uzun sürecekse görevi gerçekleştirmek için bir ön plan hizmeti başlatmak uygun olabilir. Uygulamanız arka planda olsa bile, görev kullanıcı tarafından tetiklendiyse ve arka planda başlatma kısıtlamalarından onaylanmış muafiyetlerden birine giriyorsa ön plan hizmeti başlatmasına izin verilebilir. Örneğin, bir uygulama yüksek öncelikli bir FCM mesajı alırsa arka planda olsa bile ön plan hizmeti başlatmasına izin verilir.

Görev birkaç saniyeden uzun sürecekse görev planlama API'lerini kullanın.