如果在作业运行时停止满足约束,请重新计划作业并显示一条Toast消息,指出作业失败

问题描述 投票:0回答:1

我正在使用android JobService,在此过程中,我遇到了来自[[Google codelabs的以下挑战:

挑战:

到目前为止,您的JobService任务只是传递了一个通知,但JobScheduler通常用于更强大的后台任务,例如更新天气或与数据库同步。由于后台任务在编程和功能上可能更加复杂,因此在任务完成时通知框架的工作落在了开发人员身上。幸运的是,开发人员可以通过调用jobFinished()来做到这一点。此挑战要求您在任务完成后调用jobFinished():

    当给定时,执行启动AsyncTask的JobService满足约束。
  • 该的AsyncTask应睡5秒钟。
  • 如果约束停止在当线程处于休眠状态满足,重新安排工作并显示Toast消息,说明工作失败。
  • 好吧,我对第3点感到震惊。

我怎样才能确定是否作业运行时的工作约束仍然被满足?

这是我的代码:

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任务只是传递了一个...
android android-jobscheduler
1个回答
0
投票
我已经尝试过了。。
© www.soinside.com 2019 - 2024. All rights reserved.