Arka plan çalışmalarına genel bakış

Çoğu zaman uygulamaların aynı anda birden fazla şey yapması gerekir. Android API'leri bunu yapmanızı sağlamak için birçok farklı yol sunar. Doğru seçeneği seçmek çok önemlidir. Bir seçenek bir durum için doğru, başka bir durum için ise çok yanlış olabilir. Yanlış API'lerin seçilmesi uygulamanızın performansına veya kaynak verimliliğine zarar verebilir. Bu da pili tüketebilir ve genel olarak kullanıcının cihazının performansını düşürebilir. Bazı durumlarda yanlış yaklaşımı seçmek uygulamanızın Play Store'da listelenmesini engelleyebilir.

Bu dokümanda, kullanabileceğiniz farklı seçenekler açıklanmakta ve durumunuza uygun seçeneği belirlemenize yardımcı olmak amaçlanmaktadır.

Terminoloji

Arka plan çalışmasıyla ilgili bazı önemli terimler birbiriyle çelişen şekillerde kullanılabilir. Bu nedenle, şartlarımızı tanımlamak önemlidir.

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

Bu belgenin amaçları doğrultusunda, bir uygulamanın ana iş akışı dışında yapmakta olduğu işlemi belirtmek için "görev" terimini kullanacağız. Ortak çalışmaların anlaşılması için bunu üç ana görev türüne ayırdık: eşzamansız çalışma, arka planda çalışma ve ön plan hizmetleri.

Doğru seçeneği belirleyin

Çoğu senaryoda görevin dahil olduğu kategoriyi (eşzamansız çalışma, arka plan çalışması veya ön plan hizmetleri) belirleyerek göreviniz için kullanılacak doğru API'leri bulabilirsiniz.

Yine de emin değilseniz, karara daha fazla ayrıntı eklemek için sağladığımız akış şemalarını kullanabilirsiniz. Bu seçeneklerin her biri, bu belgenin ilerleyen bölümlerinde daha ayrıntılı olarak açıklanmıştır.

Arka plan çalışması için göz önünde bulundurulması 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 ön planda çalışırken yalnızca eşzamanlı işlem yapması gerekir. Örneğin, bir uygulamanın zaman alan bir hesaplama yapması gerekebilir. Hesaplama kullanıcı arayüzü iş parçacığında yapıldıysa hesaplama tamamlanana kadar kullanıcı uygulamayla etkileşimde bulunamaz. Bu durum, ANR hatasına neden olabilir. Böyle bir durumda, uygulamanın bir eşzamansız çalışma seçeneği kullanması gerekir.

Yaygın eşzamansız çalışma seçenekleri arasında Kotlin eş yordamları ve Java iş parçacıkları bulunur. eşzamansız çalışma belgelerinde daha fazla bilgi bulabilirsiniz. Arka plan çalışmasının aksine, uygulama geçerli bir yaşam döngüsü aşamasında kalmazsa (örneğin, uygulama ön plandan ayrılırsa) eşzamansız çalışmanın tamamlanmasının garanti edilmediğini unutmayın.

Arka plan çalışması

Arka planda çalışma, kullanıcı uygulamadan ayrılsa bile devam etmesi gereken bir iş yapmanız gerektiğinde daha esnek bir seçenektir. Çoğu durumda, arka plan çalışması için en iyi seçenek WorkManager'ı kullanmaktır, ancak bazı durumlarda platform JobScheduler API'yi kullanmak uygun olabilir.

WorkManager, basit veya karmaşık işleri ihtiyaç duyduğunuz şekilde ayarlamanıza olanak tanıyan güçlü bir kitaplıktır. Görevleri belirli zamanlarda çalışacak şekilde planlamak veya görevin ne zaman çalışması gerektiğini belirtmek için WorkManager'ı kullanabilirsiniz. Görevlerden oluşan zincirler bile oluşturabilirsiniz. Böylece her görev sırayla çalışır ve sonuçlarını bir sonrakine aktarır. Mevcut tüm seçenekleri anlamak için WorkManager özellik listesini okuyun.

Arka planda çalışmayla ilgili en yaygın senaryolardan bazıları şunlardır:

  • Sunucudan düzenli aralıklarla veri alma
  • Sensör verilerini getirme (ör. adım sayacı verileri)
  • Düzenli konum verilerini alma (Android 10 veya sonraki sürümlerde ACCESS_BACKGROUND_LOCATION izni almanız gerekir)
  • Kamera tarafından oluşturulan fotoğraflar gibi bir içeriği tetikleyiciye dayalı içerik yükleme

Ön plan hizmetleri

Ön plan hizmetleri, kesintiye uğramaması gereken görevleri anında yürütmeniz için güçlü bir yol sunar. Ancak ön plan hizmetleri cihaza ağır bir yük bindirebilir ve bazen gizlilik ve güvenlikle ilgili sonuçlar doğurabilir. Bu nedenlerle, sistem uygulamaların ön plan hizmetlerini nasıl ve ne zaman kullanabileceğine dair birçok kısıtlama uygular. Örneğin, bir ön plan hizmetinin kullanıcı tarafından fark edilebilir olması gerekir ve çoğu durumda uygulamalar arka plandayken ön plan hizmetlerini başlatamaz. Daha fazla bilgi için ön plan hizmetleri belgelerine bakın.

Ön plan hizmeti oluşturmanın iki yöntemi vardır. Kendi Service hesabınızı beyan edebilir ve Service.startForeground() çağrısı yaparak hizmetin ön plan hizmeti olduğunu belirtebilirsiniz. Alternatif olarak, uzun süreli çalışanlar için destek bölümünde açıklandığı gibi, WorkManager'ı ön plan hizmeti oluşturmak için kullanabilirsiniz. Ancak WorkManager tarafından oluşturulan bir ön plan hizmetinin, diğer ön plan hizmetleriyle aynı kısıtlamalara uyması gerektiğini unutmayın. WorkManager, ön plan hizmeti oluşturmayı kolaylaştıran bazı pratik API'ler sunar.

Alternatif API'ler

Sistem, daha spesifik kullanım alanlarında daha iyi performans göstermek üzere 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 hizmeti türleri belgelerinde, belirli bir ön plan hizmet türü yerine kullanılabilecek iyi bir alternatif API olduğu belirtilmektedir.

Alternatif API'ler kullanmayla ilgili en yaygın senaryolardan 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 grafikte, "Kullanıcı tarafından başlatılan görevler" bölümündeki malzeme özetlenmektedir.
Şekil 1: Kullanıcı tarafından başlatılan bir arka plan görevini çalıştırmak için doğru API'nin nasıl seçileceği.

Bir uygulamanın arka plan çalışması yapması gerekiyorsa ve işlem, kullanıcı tarafından uygulama görünür durumdayken 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 gerekir mi?

Görevin, uygulama arka plandayken çalışmaya devam etmesi gerekmiyorsa eşzamansız çalışmayı kullanmanız gerekir. Eşzamansız iş için pek çok seçenek vardır. Burada anlaşılması gereken önemli nokta, uygulama arka plana geçerse bu seçeneklerin tümünün çalışmayı durdurduğudur. (Uygulama kapatıldığında da durur.) Ö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 ertelenirse veya kesintiye uğrarsa kötü bir kullanıcı deneyimi olur mu?

Bir görevin ertelenmesi veya iptal edilmesi durumunda kullanıcı deneyiminin olumsuz yönde etkilenip etkilenmeyeceğini göz önünde bulundurmak önemlidir. Örneğin, bir uygulamanın öğelerini güncellemesi gerekiyorsa kullanıcı, işlemin hemen mi yoksa cihaz şarj olurken gece yarısı mı gerçekleştiğini fark etmeyebilir. Bu gibi durumlarda arka planda çalışma seçeneklerini kullanmanız gerekir.

Kısa ve kritik bir görev mi?

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

Sadece bu amaca yönelik alternatif bir API var mı?

Görev, kullanıcı tarafından görülemiyorsa doğru çözüm bir ön plan hizmeti kullanmak olabilir. Bu hizmetler başladıktan sonra sürekli olarak çalıştığından, görevi kesintiye uğratmanın kötü bir kullanıcı deneyimine neden olacağı durumlarda iyi bir seçimdir. Örneğin, bir antrenman izleme uygulaması, kullanıcıların koşu rotalarını haritaya kaydetmelerini sağlamak için konum sensörleri kullanabilir. Bunu arka planda çalışma seçeneğiyle yapmak istemezsiniz çünkü görev duraklatılırsa izleme hemen duracaktır. Böyle bir durumda, ön plan hizmeti çok mantıklı olur.

Ancak ön plan hizmetleri çok sayıda cihaz kaynağı kullanabileceğinden sistem, bunların ne zaman ve nasıl kullanılabileceği konusunda birçok kısıtlama uygular. Çoğu durumda, bir ön plan hizmeti kullanmak yerine işi sizin yerinize daha az sıkıntıyla halledecek alternatif bir API kullanabilirsiniz. Örneğin, kullanıcı belirli bir yere ulaştığında uygulamanızın bir işlem yapması gerekiyorsa en iyi seçeneğiniz, kullanıcının konumunu bir ön plan hizmetiyle izlemek yerine coğrafi sınır API'sini kullanmaktır.

Bir etkinliğe yanıttaki görevler

Uygun API'nin nasıl seçileceğini gösteren akış şeması. Bu grafikte "Bir etkinliğe verilen görevler" bölümündeki materyal özetlenmektedir.
Şekil 2: Etkinlik tarafından tetiklenen bir arka plan görevi çalıştırmak için doğru API'yi seçme.

Bazen bir uygulamanın bir tetikleyiciye karşılık olarak arka planda çalışması gerekir. Örneğin:

Bu, harici bir tetikleyici (FCM mesajı gibi) veya uygulamanın kendisi tarafından ayarlanan bir alarm nedeniyle yapılmış olabilir. Örneğin, bir oyun bazı öğeleri güncellemesini isteyen bir FCM mesajı alabilir.

Görevin birkaç saniye içinde tamamlanacağından emin olursanız görevi gerçekleştirmek için eşzamansız çalışmayı kullanın. Uygulamanız arka planda olsa bile sistem, uygulamanızın bu tür görevleri gerçekleştirmesi için birkaç saniye süre tanır.

Görev birkaç saniyeden uzun sürerse görevi gerçekleştirmek için bir ön plan hizmeti başlatmak uygun olabilir. Aslında, uygulamanız şu anda arka planda olsa bile, görev kullanıcı tarafından tetiklenmişse ve arka planda başlatma kısıtlamalarından onaylanmış muafiyetler kapsamına giriyorsa bir ön plan hizmeti başlatmasına izin verilebilir. Örneğin, bir uygulama yüksek öncelikli FCM mesajı alırsa arka planda olsa bile uygulamanın ön plan hizmeti başlatmasına izin verilir.

Görev birkaç saniyeden uzun sürecekse arka plan çalışması özelliğini kullanın.