1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
| package com.example.myworkmanager;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.work.Constraints;
import androidx.work.Data;
import androidx.work.ExistingPeriodicWorkPolicy;
import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkInfo;
import androidx.work.WorkManager;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// btn1:一次性任务
public void testBackgroundWork1(View view) {
// 对简单任务进行包装
OneTimeWorkRequest oneTimeWorkRequest = OneTimeWorkRequest.from(MyWorker1.class); // 简单的用静态方法
WorkManager.getInstance(getApplicationContext()).enqueue(oneTimeWorkRequest);
}
// btn2:一次性任务传递数据
public void testBackgroundWork2(View view) {
Data sendData = new Data.Builder().putString("haha", "哈哈").build();
// 请求对象初始化
OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(MyWorker2.class) // 复杂的用构建器
.setInputData(sendData)
.build();
// 获取任务的回馈数据
WorkManager.getInstance(this).getWorkInfoByIdLiveData(oneTimeWorkRequest.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(WorkInfo workInfo) {
// 状态机
Log.d(TAG, "状态: " + workInfo.getState().name());
if (workInfo.getState().isFinished()) {
Log.d(TAG, "后台任务已完成");
Log.d(TAG, "回馈数据: " + workInfo.getOutputData().getString("xixi"));
}
}
});
// 请求对象加入到队列
// 用room保存任务
WorkManager.getInstance(getApplicationContext()).enqueue(oneTimeWorkRequest);
}
// btn3:多个任务
public void testBackgroundWork3(View view) {
OneTimeWorkRequest oneTimeWorkRequest3 = new OneTimeWorkRequest.Builder(MyWorker3.class).build();
OneTimeWorkRequest oneTimeWorkRequest4 = new OneTimeWorkRequest.Builder(MyWorker4.class).build();
OneTimeWorkRequest oneTimeWorkRequest5 = new OneTimeWorkRequest.Builder(MyWorker5.class).build();
List<OneTimeWorkRequest> oneTimeWorkRequestList = new ArrayList<>();
oneTimeWorkRequestList.add(oneTimeWorkRequest3);
oneTimeWorkRequestList.add(oneTimeWorkRequest5);
WorkManager.getInstance(this)
.beginWith(oneTimeWorkRequestList)
.then(oneTimeWorkRequest4)
.enqueue();
}
// btn4:定期任务
public void testBackgroundWork4(View view) {
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest
// .Builder(MyWorker1.class, 15, TimeUnit.MINUTES) // 可以定义的最短重复间隔是 15 分钟
.Builder(MyWorker1.class, // 在每个时间间隔的灵活时间段内运行(每个小时的最后十五分钟运行)
15, TimeUnit.HOURS,
1, TimeUnit.MINUTES)
.setInitialDelay(1, TimeUnit.SECONDS) // 定期任务只有第一次执行会被延迟
.build();
WorkManager.getInstance(this).enqueue(periodicWorkRequest);
}
// btn5:约束条件
@RequiresApi(api = Build.VERSION_CODES.M)
public void testBackgroundWork5(View view) {
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) // 网络连接中
.setRequiresCharging(true) // 充电中
// .setRequiresDeviceIdle(false) // 空闲时
.build();
// 请求对象
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MyWorker3.class)
.setConstraints(constraints)
.addTag("myTag") // 标记
.build();
// 加入队列
WorkManager.getInstance(this).enqueue(request);
}
// 判断是否有网络连接
public static boolean isNetworkConnected(Context context) {
if (context != null) {
// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// 获取NetworkInfo对象
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
//判断NetworkInfo对象是否为空
if (networkInfo != null)
return networkInfo.isAvailable();
}
return false;
}
// btn6:管理工作
public void testBackgroundWork6(View view) {
Constraints constraints = new Constraints.Builder().setRequiresCharging(true).build();
PeriodicWorkRequest request = new
PeriodicWorkRequest.Builder(MyWorker3.class, 24, TimeUnit.HOURS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"request", // 用于唯一标识工作请求
ExistingPeriodicWorkPolicy.KEEP, // 冲突解决政策
request);
}
}
|