Arka Planda Çalışmaya Genel Bakış

Arka planda veri işleme, hem kullanıcılarınıza duyarlı hem de Android platformunda iyi bir vatandaş olan bir Android uygulaması oluşturmanın önemli bir parçasıdır. Ana iş parçacığı üzerinde çalışmak, kötü performansa ve dolayısıyla da kötü bir kullanıcı deneyimine yol açabilir.

Bu kılavuz, nelerin arka plan çalışması olarak nitelendirildiğini açıklar, arka plan görev kategorilerini tanımlar, görevlerinizi kategorilere ayırmak için ölçütler sağlar ve görevleri yürütmek için kullanmanız gereken API'ler önerir.

Temel ilke

Genel olarak, engelleme görevlerini kullanıcı arayüzü iş parçacığından çıkarmanız gerekir. Uzun süreli yaygın görevler arasında bit eşlemin kodunu çözme, depolama alanına erişme, makine öğrenimi (ML) modeli üzerinde çalışma veya ağ istekleri gerçekleştirme gibi işlemler yer alır.

Arka plan çalışmasının tanımı

Bir uygulama, aşağıdaki koşulların her ikisi de karşılandığında arka planda çalışmaktadır:

  • Uygulama etkinliklerinin hiçbiri şu anda kullanıcı tarafından görülemez.
  • Uygulama, uygulamadaki bir etkinlik kullanıcıya görünürken başlatılan herhangi bir ön plan hizmetini çalıştırmıyordur.

Aksi takdirde, uygulama ön planda çalışıyordur.

Yaygın arka plan çalışması türleri

Arka plan çalışması üç temel kategoriden birine girer:

  • Hemen: Hemen yürütülmesi ve kısa bir süre içinde tamamlanması gerekir.
  • Uzun Çalışma: Tamamlanması biraz zaman alabilir.
  • Ertelenebilir: Hemen çalışması gerekmez.

Benzer şekilde, aşağıdaki üç kategorinin her birinde arka plan çalışması kalıcı veya önemli olabilir:

  • Kalıcı çalışma: Uygulamanın yeniden başlatılması ve cihazın yeniden başlatılması yoluyla programlanmış olarak devam eder.
  • Belirsiz çalışma: Süreç sona erdikten sonra artık planlanmaz.
Şekil 1: Arka plan çalışmasının türleri.

Anlamsız veya kalıcı çalışmaya farklı yaklaşmalısınız:

  • Tüm kalıcı işler: Tüm kalıcı çalışma biçimleri için WorkManager'ı kullanmalısınız.
  • Acil olmayan çalışmalar: Acil işler için Kotlin eş yordamlarını kullanmalısınız. Java programlama dili kullanıcıları, önerilen seçenekler için ileti dizisi oluşturma kılavuzunu okuyun.
  • Uzun süreli ve ertelenebilir, zarara uğratabilecek işler: Uzun süren ve ertelenebilir, engel teşkil eden işler kullanmamalısınız. Bunun yerine, bu tür görevleri WorkManager kullanarak kalıcı çalışmalar yaparak tamamlamalısınız.

Aşağıdaki tabloda, her bir arka plan çalışması türü için hangi yaklaşımı benimsemeniz gerektiği gösterilmektedir.

Kategori Kalıcı Belirsiz
Hemen WorkManager Eş yordamlar
Uzun koşu WorkManager Önerilmez. Bunun yerine, WorkManager'ı kullanarak işi kalıcı olarak yapın.
Ertelenebilir WorkManager Önerilmez. Bunun yerine, WorkManager'ı kullanarak işi kalıcı olarak yapın.

Teslimat

Anında çalışma , hemen yürütülmesi gereken görevleri kapsar. Bunlar kullanıcı için önemli olan veya başka şekilde daha sonra ertelenmiş yürütme için planlayamayacağınız görevlerdir. Bu ayarlar, uygulama kapansa veya cihaz yeniden başlatılsa bile hızlı yürütme için programlı olarak kalmalarını gerektirebilecek kadar önemlidir.

Önerilen çözüm

Kalıcı ve acil işler için WorkManager'ı bir OneTimeWorkRequest ile kullanmanız gerekir. Bir WorkRequest'i setExpedited() ile hızlandırın.

Acil acil işler için Kotlin eş yordamlarını kullanmalısınız. Uygulamanız Java programlama dilini kullanıyorsa RxJava veya Guava'yı kullanmanız gerekir. Executors aracını da kullanabilirsiniz.

Örnekler

  • Bir uygulamanın bir veri kaynağından veri yüklemesi gerekiyor. Ancak, ana iş parçacığında böyle bir istekte bulunmak bunu engeller ve kullanıcı arayüzü duraklamalarına neden olur. Bunun yerine uygulama, isteği bir eş yordamdaki ana iş parçacığından çıkarır.
  • Bir uygulamanın, sohbet uygulamasında mesaj göndermesi gerekir. Uygulama, bir Worker oluşturur ve görevi WorkRequest olarak sıraya alır. WorkRequest işlemini setExpedited() ile hızlandırır.

Uzun soluklu işler

Tamamlanması on dakikadan fazla sürebilecekse iş uzun sürer.

Önerilen çözüm

WorkManager, uzun süreli bir Worker kullanarak bu tür görevleri gerçekleştirmenize olanak tanır.

Örnek

Bir uygulamanın, parçalara ayıramayacağınız büyük bir dosya indirmesi gerekiyor. Uzun süreli bir Worker oluşturur ve indirme işlemini sıraya alır. Daha sonra uygulama, 15 dakikadan uzun bir süre sonra dosyayı arka planda indirir.

Ertelenen iş

Ertelemeli iş, hemen tamamlanması gerekmeyen çalışmalardır.

Önerilen çözüm

Ertelenmiş işleri WorkManager aracılığıyla planlamak, hemen tamamlanması gerekmeyen ancak uygulama kapandığında ya da cihaz yeniden başlatıldığında planlanmış kalması gereken görevleri yönetmenin en iyi yoludur.

Örnek

Bir uygulama, verileri bir arka uçla düzenli olarak senkronize etmek istiyor. Kullanıcı senkronizasyonu tetiklemez ve iş, cihaz boştayken gerçekleştirilir. Önerilen yaklaşım, özel bir Worker ve bu senaryolar için kısıtlamalar içeren bir PeriodicWorkRequest kullanmaktır.

Alarmlar

Alarmlar, arka plan çalışmasının bir parçası olmayan özel bir kullanım alanıdır. Arka plan çalışmalarını yukarıda özetlenen iki çözümle, yani eş yordamları ve WorkManager'ı kullanarak yürütmelisiniz.

AlarmManager'ı yalnızca alarmlar veya takvim etkinlikleri gibi kesin alarmlar programlamak için kullanmalısınız. Arka plan çalışmasını planlamak için AlarmManager kullanılırken cihazı Doz modundan çıkarır. Bu nedenle, kullanımının pil ömrü ve genel sistem sağlığı üzerinde olumsuz bir etkisi olabilir. Uygulamanız bu gibi etkilerden sorumludur.

Ön plan hizmetlerini değiştir

Android 12, arka planda ön plan hizmetlerinin başlatılmasını kısıtlar. Çoğu durumda ön plan hizmetlerini kendiniz yürütmek yerine WorkManager'daki setForeground() hizmetini kullanmanız gerekir. Bu, WorkManager'ın ön plan hizmetinin yaşam döngüsünü yönetmesine ve verimlilik sağlamasına olanak tanır.

Uzun süren görevleri gerçekleştirmek için ön plan hizmetlerini yine de kullanmanız ve kullanıcıya devam ettikleri konusunda bilgi vermeniz gerekir. Doğrudan ön plan hizmetlerini kullanıyorsanız kaynak verimliliğini korumak için hizmeti doğru şekilde kapattığınızdan emin olun.

Ön plan hizmetlerini doğrudan kullanmayla ilgili bazı kullanım alanları şunlardır:

  • Medya oynatma
  • Aktivite takibi
  • Konum paylaşımı
  • Sesli aramalar veya görüntülü görüşmeler