Android WorkManager 使用範例

Android WorkManager 使用範例

 

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 留言