我正在开发一个Android应用程序,用于在到达本地数据库中存储的日期时发送通知.为此,我try 使用定期工作请求,该请求将调用一个函数将存储的日期与当前日期进行比较,并通知用户是否已到达该日期.然而,当判断后台任务判断器时,我的工作人员永久处于"排队"状态,并且从不运行此功能,我不确定原因.
在MainActive.kt的OnCreate()方法中创建工作请求:
class MainActivity : ComponentActivity() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
//...
//For WorkManager to manage Notifications
// Create periodic work request
val periodicWorkRequest = PeriodicWorkRequestBuilder<EventCheckWorker>(5, TimeUnit.SECONDS) //Temporarily set to 5 sec. for testing
.build()
// Enqueue periodic work
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"EventCheckWorker",
ExistingPeriodicWorkPolicy.KEEP,
periodicWorkRequest
)
}
}
EventCheckWorker判断是否已到达日期:
class EventCheckWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
Log.d("START doWork", "START doWork")
return try {
// Retrieve all events from Assignment
val assignmentsFlow = AssignmentDatabase.getDatabase(applicationContext).assignmentDao()
.getAllAssignments()
val today = Calendar.getInstance().timeInMillis
runBlocking {
//Converts Flow<List<Assignment>> into List<Assignment>
assignmentsFlow.collect { assignments ->
// Check if any event date is today. If today, send a notification
for (assignment in assignments) {
Log.d("Loop doWork", "Loop doWork " + assignment.id.toString())
if (assignment.dueDate.time <= today) {
sendNotification(applicationContext, assignment.name)
}
}
}
}
Log.d("SUCCESS doWork", "SUCCESS doWork")
Result.success()
} catch (e: Exception) {
// Log the exception
Log.e("EventCheckWorker", "Error processing events", e)
Result.failure()
}
}
}
EventCheckWorker中的Log陈述永远不会出现在Logcat中,这意味着doWork()永远不会被调用.我不确定是什么阻止此方法运行.
这是督察的观点.我看到我有一个需要网络连接的限制,我也不确定为什么会出现这种情况,因为我删除了该限制的代码设置并重新运行了应用程序.无论如何,我的模拟设备is连接到网络,所以我认为这应该不是问题.
我还try 等待至少15分钟的时间间隔来等待定期请求发生,但该功能再次没有运行.
对此我们将不胜感激.谢谢