如何每隔一定的时间安排任务

时间:2018-08-26 14:13:13

标签: android job-scheduling android-jobscheduler

我正尝试如下所示使用JobScheduler,我希望每1500毫秒安排一次任务。当我运行下面发布的代码时,我收到以下信息 在logCat中:

E/JobServiceContext: Time-out while trying to bind com.example.pc_amr.twittertrendsnearlocation/.ActMain$JobSchedulerService jId=1, u0, dropping.

注意:JobSchedulerService是在ActMain活动内部创建的

请让我知道如何正确地每11500毫秒安排任务以及如何解决此错误

清单

 <service
        android:name=".services.TwitterTrendsAPIService"
        android:exported="false"
        android:enabled="true"/>
 <service
        android:name=".ActMain$JobSchedulerService"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="true"/>

代码

this.mJobScheduler = (JobScheduler) getApplicationContext().getSystemService(JOB_SCHEDULER_SERVICE);
    this.mComponentName = new ComponentName(this, JobSchedulerService.class);
    JobInfo jobInfoObj = new JobInfo.Builder(1, this.mComponentName).setPeriodic(1500).build();
    this.mJobScheduler.schedule(jobInfoObj);
    ...
    ...
    ...
    public class JobSchedulerService extends JobService {

   public JobSchedulerService() {
        super();
    }

    @Override
    public boolean onStartJob(JobParameters params) {
        Log.w(TAG, SubTag.bullet("onStartJob"));
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.w(TAG, SubTag.bullet("onStartJob"));
        return true;
    }
}

2 个答案:

答案 0 :(得分:0)

由于只有11500ms,所以最好的答案是使用Handler:

Handler handler = new Handler();
int delay = 11500 ; //milliseconds

handler.postDelayed(new Runnable(){
    public void run(){
        //ur code here
        handler.postDelayed(this, delay);
    }
}, delay);

答案 1 :(得分:0)

首先,JobScheduler的最短时间约为15分钟左右。您不能使用JobScheduler每1.5秒进行一次工作。

第二,您的JobScheduler是活动内的嵌套类。这是行不通的。您需要将其设为static类或独立类。

有多种方法可以定期从用户界面执行工作,例如:

  • postDelayed()View
  • RxJava Observable.interval()
  • ScheduledExecutorService

其中任何一项是否合适,很大程度上取决于您要完成的工作。