Worker kullandığınızda WorkManager
Worker.doWork() adlı kişiye otomatik olarak telefon eder
bir mesaj dizisinde yer alır. Arka plan ileti dizisi Executor kaynağından geliyor
WorkManager'ın Configuration içinde belirtilir.
WorkManager, varsayılan olarak sizin için bir Executor oluşturur. Ancak şunları da özelleştirebilirsiniz:
oluşturmanız gerekir. Örneğin, bilgisayarınızda bulunan mevcut bir arka plan Yürütücüyü
arka planda çalıştığından emin olmak için tek iş parçacıklı bir Executor oluşturun
sırayla yürütülür veya özel bir Executor belirtin.
Executor, WorkManager'ı manuel olarak başlattığınızdan emin olun.
WorkManager'ı manuel olarak yapılandırırken Executor öğenizi şu şekilde belirtebilirsiniz:
şöyle olur:
Kotlin
WorkManager.initialize( context, Configuration.Builder() // Uses a fixed thread pool of size 8 threads. .setExecutor(Executors.newFixedThreadPool(8)) .build())
Java
WorkManager.initialize( context, new Configuration.Builder() .setExecutor(Executors.newFixedThreadPool(8)) .build());
Aşağıda, bir web sayfasının içeriğini indiren basit bir Worker örneği verilmiştir.
100 kez:
Kotlin
class DownloadWorker(context: Context, params: WorkerParameters) : Worker(context, params) { override fun doWork(): ListenableWorker.Result { repeat(100) { try { downloadSynchronously("https://www.google.com") } catch (e: IOException) { return ListenableWorker.Result.failure() } } return ListenableWorker.Result.success() } }
Java
public class DownloadWorker extends Worker { public DownloadWorker(Context context, WorkerParameters params) { super(context, params); } @NonNull @Override public Result doWork() { for (int i = 0; i < 100; i++) { try { downloadSynchronously("https://www.google.com"); } catch (IOException e) { return Result.failure(); } } return Result.success(); } }
Worker.doWork() özelliğinin bir
senkronize çağrınız varsa, arka plan çalışmanızın tamamını
bir engelleme modu kullanmayı deneyin ve yöntem çıkış yapana kadar işlemi tamamlayın. Bir
doWork() içinde eşzamansız API oluşturur ve Result döndürürse geri çağırmanız
ve düzgün çalışmayabilir. Bu durumdaysanız bir ListenableWorker kullanmayı düşünün (bkz. ListenableWorker'da Threading).
Çalışmakta olan Worker herhangi bir nedenle durdurulduğunda
Worker.onStopped() numaralı telefona bir çağrı alır. Bu yöntemi geçersiz kılın veya
Worker.isStopped() numaralı telefonu ara
ve gerektiğinde kaynak tasarrufu sağlamak için Google Analytics'i kullanın. Worker
durdurulduğunda, döngünün ortasında olabilir.
indirme işlemini gerçekleştirecek ve durdurulmuş olsa bile devam edecektir. Alıcı:
bu davranışı optimize etmek için aşağıdaki gibi bir işlem yapabilirsiniz:
Kotlin
class DownloadWorker(context: Context, params: WorkerParameters) : Worker(context, params) { override fun doWork(): ListenableWorker.Result { repeat(100) { if (isStopped) { break } try { downloadSynchronously("https://www.google.com") } catch (e: IOException) { return ListenableWorker.Result.failure() } } return ListenableWorker.Result.success() } }
Java
public class DownloadWorker extends Worker { public DownloadWorker(Context context, WorkerParameters params) { super(context, params); } @NonNull @Override public Result doWork() { for (int i = 0; i < 100; ++i) { if (isStopped()) { break; } try { downloadSynchronously("https://www.google.com"); } catch (IOException e) { return Result.failure(); } } return Result.success(); } }
Bir Worker durdurulduktan sonra nereden geri döndüğünüzün bir önemi yoktur
Worker.doWork(); Result yoksayılır.