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.
Arka planda çalışma yaklaşımı
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öreviWorkRequest
olarak sıraya alır.WorkRequest
işleminisetExpedited()
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