我正在學習如何使用JobScheduler。如onresume方法中所示,爲了執行作業,我設置了要滿足的條件,當設備未充電時,將安排作業,不管設備是否空閒,作業將每 7執行秒。如何使用Jobscheduler安排工作
在運行時,USB電纜連接到設備,以便安裝應用程序,這意味着設備正在充電,所以在安裝應用程序後 作業還沒有啓動,因爲設備正在充電,但我拔掉後,我執行的作業 執行的工作,但發生的事情是,工作從未開始,我不明白爲什麼
請讓我知道爲什麼這樣的行爲發生,請讓我知道下面的答案問題會幫助我更好地理解 jobScheduler:
問:是setRequiresChargi ng(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());
}
}
jobService:
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;
}
}
「並且該作業每7秒執行一次」 - Android 7.0+的最短時間爲15分鐘。我不記得Android 5.0-6.0的最低期限,但如果不到一分鐘,我會感到驚訝。 – CommonsWare
謝謝先生..但正如你所說的「我不記得在Android 5.0-6.0的最短時間」..有沒有其他的選擇? – user2121