Android “我需要做什么才能完成?”;在下月初触发一次作业/警报,以调用API;在科特林?
我是Kotlin和Android的新手,当我试图研究Kotlin/Android中的作业调度程序时,我被很多方法弄得不知所措,但所有方法似乎都很复杂 我正在开发一个简单的应用程序,记录客户的反馈,大部分是离线的。但它有一个在线功能,就是在每个月初通过API将报告发送到一些电子邮件地址 我需要最简单的方法来实现这一点,即:Android “我需要做什么才能完成?”;在下月初触发一次作业/警报,以调用API;在科特林?,android,kotlin,scheduler,jobs,android-alarms,Android,Kotlin,Scheduler,Jobs,Android Alarms,我是Kotlin和Android的新手,当我试图研究Kotlin/Android中的作业调度程序时,我被很多方法弄得不知所措,但所有方法似乎都很复杂 我正在开发一个简单的应用程序,记录客户的反馈,大部分是离线的。但它有一个在线功能,就是在每个月初通过API将报告发送到一些电子邮件地址 我需要最简单的方法来实现这一点,即: 可以执行应用程序是否处于活动状态或已销毁状态——作为一项服务 不必精确(不精确的时间是可以的) 我只需要启动一次,因为当用户与应用程序交互时,应用程序将设置为下一次启动。不需
- 可以执行应用程序是否处于活动状态或已销毁状态——作为一项服务
- 不必精确(不精确的时间是可以的)
- 我只需要启动一次,因为当用户与应用程序交互时,应用程序将设置为下一次启动。不需要重复
- 下个月初把它炒了
- 我可以用新作业替换现有作业,如果上一个作业尚未启动,但用户已经与应用程序进行了另一次交互,因为报告总结了整个月的活动。我读到,具有“相同意图”的报警/作业可以相互替换,尽管我不确定在实现中它实际上是什么样子
- 因为数据在数据库中,我想当应用程序处于非活动状态时,我可能无法访问数据库,我想每次设置作业/警报时,我都可以将要发送的数据放在用户共享首选项中。我在某个地方读到后台服务可以从共享首选项中读取信息
- 需要做网络电话
fun userDoInteractionWithApp (data: Data) {
this.process (data)
val report = this.generateThisMonthReport()
this.scheduleNextReport(report, Date())
}
fun scheduleNextReport(report: String, curDate: Date) {
this.saveToSharedPreferences ("report", report)
val c = Calendar.getInstance()
c.time = curDate
c.add(Calendar.MONTH, 1)
c.set(Calendar.DAY_OF_MONTH, 1)
c.set(Calendar.HOUR_OF_DAY, 10)
val targetDate = c.time
// and then?
}
fun sendReport() { // I want to fire this function, for example
val report = this.loadFromSharedPreferences ("report") as String
Network.sendReport(senderEmail, destinationEmail, "This is the report", report) // will run synchronously
}
如果你不必在准确的时间启动应用程序,最好的方法就是使用 你称之为:
val uploadWorkRequest = OneTimeWorkRequestBuilder<YourWorker>()
.build()
WorkManager.getInstance().enqueue(uploadWorkRequest)
val uploadWorkRequest=OneTimeWorkRequestBuilder()
.build()
WorkManager.getInstance().enqueue(上传工作请求)
您可以通过以下方式设置延迟链接:
.setInitialDelay(持续时间,时间单位)如果您不必在准确的时间启动应用程序,最好的方法是使用 你称之为:
val uploadWorkRequest = OneTimeWorkRequestBuilder<YourWorker>()
.build()
WorkManager.getInstance().enqueue(uploadWorkRequest)
val uploadWorkRequest=OneTimeWorkRequestBuilder()
.build()
WorkManager.getInstance().enqueue(上传工作请求)
您可以通过以下方式设置延迟链接:
.setInitialDelay(持续时间,时间单位)哦,很有趣。以前从未听说过WorkManager。我正在读这篇文章,会让你知道的!哦,很有趣。以前从未听说过WorkManager。我正在读这篇文章,会让你知道的!不用担心数据库。如果您的警报触发且其代码正在运行,则表示您的应用程序正在运行(尽管不在前台且UI可见),您可以访问数据库。您不需要替换警报,因为当警报触发时,您从数据库获得的数据就是实际的当前数据。接下来,你可能真的应该使用WorkManager来完成这项工作,只需要计算工作延迟多长时间(距离下一笔钱开始还有多长时间)@TimCastelijns哦,好吧,谢谢你的确认!旁注,无需使用
此。
除非您必须区分具有相同属性的变量name@TimCastelijns是的,我明白。我只想给出一个上下文,它们是类中的自定义方法,在给出解决方案时,您可以放弃实现(只是认为它已经存在了)。不用担心数据库。如果您的警报触发且其代码正在运行,则表示您的应用程序正在运行(尽管不在前台且UI可见),您可以访问数据库。您不需要替换警报,因为当警报触发时,您从数据库获得的数据就是实际的当前数据。接下来,你可能真的应该使用WorkManager来完成这项工作,只需要计算工作延迟多长时间(距离下一笔钱开始还有多长时间)@TimCastelijns哦,好吧,谢谢你的确认!旁注,无需使用此。
除非您必须区分具有相同属性的变量name@TimCastelijns是的,我明白。我只想给出一个上下文,它们是类中的自定义方法,在给出解决方案时,您可以放弃实现(只要认为它已经存在)。