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.