Android WorkManager 是一個兼容、靈活且簡單的庫,可用於延遲執行背景工作。 WorkManager 是 Android 上推薦的任務調度器,可保證執行。¹
以下是使用 Java 語言撰寫 Android WorkManager 的步驟:
1. 將 WorkManager 庫導入您的 Android 項目中。
2. 在應用程序的 build.gradle 文件中添加以下依賴項:
```groovy
dependencies {
def work_version = "2.8.1"
// (Java only)
implementation "androidx.work:work-runtime:$work_version"
}
```
以下是一個使用 WorkManager 的簡單範例:
```java
public class MyWorker extends Worker {
public MyWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Result doWork() {
// Do the work here--in this case, upload the images.
uploadImages();
// Indicate whether the task finished successfully with the Result
return Result.success();
}
}
// Create a Constraints object that defines when the task should run
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
// Create a OneTimeWorkRequest object that defines the work to be done
OneTimeWorkRequest uploadWorkRequest =
new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(constraints)
.build();
// Enqueue the work request with WorkManager
WorkManager.getInstance(context).enqueue(uploadWorkRequest);
```
這個範例會創建一個名為 MyWorker 的類,該類繼承自 Worker 類。在 doWork() 方法中,您可以定義要執行的工作。在這個例子中,我們上傳圖片。然後,返回 Result.success() 以指示任務已成功完成。
如何使用 WorkManager 執行定期任務?
您可以使用 PeriodicWorkRequest 類來定期執行任務。以下是一個使用 PeriodicWorkRequest 的簡單範例:
```java
public class MyWorker extends Worker {
public MyWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Result doWork() {
// Do the work here--in this case, upload the images.
uploadImages();
// Indicate whether the task finished successfully with the Result
return Result.success();
}
}
// Create a Constraints object that defines when the task should run
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
// Create a PeriodicWorkRequest object that defines the work to be done
PeriodicWorkRequest uploadWorkRequest =
new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES)
.setConstraints(constraints)
.build();
// Enqueue the work request with WorkManager
WorkManager.getInstance(context).enqueue(uploadWorkRequest);
```
這個範例會創建一個名為 MyWorker 的類,該類繼承自 Worker 類。在 doWork() 方法中,您可以定義要執行的工作。在這個例子中,我們上傳圖片。然後,返回 Result.success() 以指示任務已成功完成。
然後,使用 PeriodicWorkRequest.Builder 創建一個名為 uploadWorkRequest 的對象,該對象定義了要執行的工作和執行該工作的時間間隔。在這個例子中,我們每 15 分鐘上傳一次圖片。
最後,使用 WorkManager.getInstance(context).enqueue(uploadWorkRequest) 將工作請求排入隊列。
如何使用 WorkManager 執行重複任務?
您可以使用 PeriodicWorkRequest 類來定期執行任務。如果您想要重複執行任務,則可以使用 WorkManager 的另一個類型:RepeatedWorkRequest。以下是一個使用 RepeatedWorkRequest 的簡單範例:
```java
public class MyWorker extends Worker {
public MyWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Result doWork() {
// Do the work here--in this case, upload the images.
uploadImages();
// Indicate whether the task finished successfully with the Result
return Result.success();
}
}
// Create a Constraints object that defines when the task should run
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
// Create a RepeatedWorkRequest object that defines the work to be done
RepeatedWorkRequest uploadWorkRequest =
new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES)
.setConstraints(constraints)
.build();
// Enqueue the work request with WorkManager
WorkManager.getInstance(context).enqueue(uploadWorkRequest);
```
這個範例會創建一個名為 MyWorker 的類,該類繼承自 Worker 類。在 doWork() 方法中,您可以定義要執行的工作。在這個例子中,我們上傳圖片。然後,返回 Result.success() 以指示任務已成功完成。
然後,使用 RepeatedWorkRequest.Builder 創建一個名為 uploadWorkRequest 的對象,該對象定義了要執行的工作和執行該工作的時間間隔。在這個例子中,我們每 15 分鐘上傳一次圖片。
最後,使用 WorkManager.getInstance(context).enqueue(uploadWorkRequest) 將工作請求排入隊列。
如何使用 WorkManager 設置任務優先級?
您可以使用 WorkManager 的 Constraints.Builder 類來設置任務的優先級。Constraints.Builder 類提供了幾種方法,可用於設置任務的優先級,例如 setRequiresBatteryNotLow()、setRequiresCharging()、setRequiredNetworkType() 等。以下是一個使用 Constraints.Builder 的簡單範例:
```java
Constraints constraints = new Constraints.Builder()
.setRequiresBatteryNotLow(true)
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
OneTimeWorkRequest uploadWorkRequest =
new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(constraints)
.build();
```
在這個例子中,我們使用 setRequiresBatteryNotLow() 和 setRequiredNetworkType() 方法來設置任務的優先級。這些方法會告訴 WorkManager 在什麼情況下應該執行任務。
在這個例子中,我們要求 WorkManager 在電池電量充足且網絡已連接時執行任務。
然後,使用 OneTimeWorkRequest.Builder 創建一個名為 uploadWorkRequest 的對象,該對象定義了要執行的工作和執行該工作的時間間隔。
最後,使用 WorkManager.getInstance(context).enqueue(uploadWorkRequest) 將工作請求排入隊列。
0 留言