【发布时间】:2018-11-06 17:19:55
【问题描述】:
我在我的项目中实现了WorkManager。在doWork() 完成我的任务后,我调用了stop(true); 并且我向onStopped() 中的另一个活动发送了一个广播。一切正常,但问题是 onStopped() 被调用 两次(我已经通过应用断点进行了测试)。因此,BroadcastReceiver 也被调用了两次。
我知道 WorkManager 处于 alpha 阶段。但我实际上不确定这是一个错误还是我做错了什么。请帮忙。代码如下:
public Result doWork() {
startGettingData();
stop(true);
return Result.SUCCESS;
}
@Override
public void onStopped(boolean cancelled) {
super.onStopped(cancelled);
Intent intent=new Intent(SERVER_SYNC_BROADCAST);
intent.putExtra(SYNC_RESULT_MESSAGE,responseCodes);
LocalBroadcastManager.getInstance(MyApplication.getContext()
.getApplicationContext())
.sendBroadcast(intent);
}
从活动的onCreate() 调用一次:
WorkUtil.startSyncing(SyncWorker.class);
WorkUtil.java
public class WorkUtil {
private static WorkManager mWorkManager;
public static WorkUtil workUtil;
private WorkUtil() {
mWorkManager = WorkManager.getInstance();
}
public static WorkUtil getInstance() {
if(workUtil == null) {
workUtil = new WorkUtil();
}
return workUtil;
}
public static void startSyncing(Class workerClass) {
Constraints constraints = new Constraints.Builder().build();
OneTimeWorkRequest someWork = new OneTimeWorkRequest.Builder(workerClass)
.setConstraints(constraints)
.build();
OneTimeWorkRequest oneTimeWorkRequest = someWork;
mWorkManager.enqueue(oneTimeWorkRequest);
}
public static void cancelAllWork() {
mWorkManager.cancelAllWork();
}
}
【问题讨论】:
-
您是否有机会安排两次工作?
-
实际上不是。我正在使用
OneTimeWorkRequest。更多代码已更新。请检查。 -
我觉得不用打
stop(true);,return Result.SUCCESS;就够了。 -
我也是这么想的。但是如果我删除
stop(true),则永远不会调用onStopped()。 :( -
startGettingData();是否使用新线程来获取数据?另外,为什么需要调用onStopped?它应该在工作未完成时调用......
标签: android android-workmanager