我正在学习如何使用 JobScheduler。如 onresume 方法所示,我设置了执行作业要满足的条件,作业将在设备不充电时调度,无论设备是否空闲,作业将每 7 秒执行一次。
在运行时,USB线连接到设备以安装应用程序,这意味着设备正在充电,因此安装应用程序后作业尚未开始,因为设备正在充电,但在我拔下USB线后我执行了要执行的工作,但发生的事情是工作从未开始,我不明白为什么
请让我知道为什么会发生这种行为,并请让我知道以下问题的答案,这将有助于我更好地理解 jobScheduler:
Q: setRequiresCharging(false) 是指只有在设备不充电时才会执行任务,还是意味着无论设备是否在充电,任务都会执行?
主要活动
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private static int jobId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.w(TAG, "onCreate");
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
Log.w(TAG, "onResume");
ComponentName serviceComponent = new ComponentName(this, MyJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(jobId, serviceComponent);
builder.setRequiresCharging(false);
builder.setRequiresDeviceIdle(false);
builder.setPeriodic(7 * 1000);
JobScheduler jobScheduler = (JobScheduler) getApplication().getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
}
}
工作服务:
package example.com.jobscheduler_00;
public class MyJobService extends JobService {
private static final String TAG = MyJobService.class.getSimpleName();
@Override
public boolean onStartJob(JobParameters params) {
Log.w(TAG, "onStartJob JobId: " + params.getJobId());
Toast.makeText(this, "onStartJob JobId:" + params.getJobId(), Toast.LENGTH_SHORT).show();
jobFinished(params, false);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.w(TAG, "onStopJob");
Toast.makeText(this, "onStopJob JobId:" + params.getJobId(), Toast.LENGTH_SHORT).show();
return true;
}
}