我正在使用android JobService,在此过程中,我遇到了来自[[Google codelabs的以下挑战:
挑战:
到目前为止,您的JobService任务只是传递了一个通知,但JobScheduler通常用于更强大的后台任务,例如更新天气或与数据库同步。由于后台任务在编程和功能上可能更加复杂,因此在任务完成时通知框架的工作落在了开发人员身上。幸运的是,开发人员可以通过调用jobFinished()来做到这一点。此挑战要求您在任务完成后调用jobFinished():我怎样才能确定是否作业运行时的工作约束仍然被满足?
这是我的代码:SyncActivity.kt
public fun scheduleSyncJob(view : View){
val selectedNetworkID = networkOptionsSync.checkedRadioButtonId
var selectedNetworkOption = JobInfo.NETWORK_TYPE_NONE
when (selectedNetworkID) {
R.id.noNetworkSync -> selectedNetworkOption = JobInfo.NETWORK_TYPE_NONE
R.id.anyNetworkSync -> selectedNetworkOption = JobInfo.NETWORK_TYPE_ANY
R.id.wifiNetworkSync -> selectedNetworkOption = JobInfo.NETWORK_TYPE_UNMETERED
}
val serviceName = ComponentName(packageName, AsynctaskJobService::class.java.name)
val builder = JobInfo.Builder(JOB_ID, serviceName)
.setRequiredNetworkType(selectedNetworkOption)
.setRequiresCharging(chargingSwitchSync.isChecked())
val constraintSet = ((selectedNetworkOption != JobInfo.NETWORK_TYPE_NONE) || chargingSwitchSync.isChecked)
if (constraintSet) {
val myJobInfo = builder.build()
mScheduler?.schedule(myJobInfo)
Toast.makeText(this, R.string.job_scheduled, Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, R.string.no_constraint_toast, Toast.LENGTH_SHORT).show()
}
}
如您所见,如果有任何类型的网络连接可用或设备正在充电,我正在计划我的工作。
这是
AsynctaskJobService.kt
class AsynctaskJobService : JobService() {
override fun onStopJob(params: JobParameters?): Boolean {
TODO("Not yet implemented")
}
override fun onStartJob(jobParameters: JobParameters?): Boolean {
JobTask(this).execute(jobParameters)
return true
}
private class JobTask(private val jobService: JobService) :
AsyncTask<JobParameters?, Void?, JobParameters>() {
override fun doInBackground(vararg params: JobParameters?): JobParameters? {
Log.d("Asynctask Running", System.currentTimeMillis().toString())
SystemClock.sleep(5000)
Log.d("Asynctask Running", System.currentTimeMillis().toString())
return params[0]
}
override fun onPostExecute(jobParameters: JobParameters) {
jobService.jobFinished(jobParameters, false)
Toast.makeText(jobService, "Task Finished", Toast.LENGTH_SHORT).show();
}
}
}
[我正在使用android JobService,在此过程中,我遇到了来自Google Codelabs的以下挑战:挑战:到目前为止,您的JobService任务只是传递了一个...