使用Oreo中的JobIntentSerivce调度任务

时间:2018-01-07 12:31:02

标签: android background-service android-8.1-oreo

我已经绝望了,2天我正在搜索如何安排服务器在后台安装android O并且没有任何效果,每周一次与Alarm manger相同,我读了一个很多文章,我认为JS中的所有解决方案都不是很多关于它的问题,因为它的新操作系统和主题。 我知道android O正在进行优化并杀死/销毁服务,但我知道如果我使用JobIntentService调度服务它应该正常工作。 这是我的代码

清单:

<service
            android:name=".task.UpdateJobScheduler"
            android:exported="false"
            android:permission="android.permission.BIND_JOB_SERVICE" />

之后我创建了JobScheduler:

    JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
    JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(context.getPackageName(),
            UpdateJobScheduler.class.getName()))
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setMinimumLatency(1000) //just for test the number
            .setOverrideDeadline(3000) //just for test the number
            .setRequiresDeviceIdle(false)
            .setRequiresCharging(false)
            .setPersisted(false);

    jobScheduler.schedule(builder.build());

JobIntent服务

public class UpdateJobScheduler extends JobIntentService {

private final static String TAG = UpdateJobScheduler.class.getSimpleName();
public static final int JOB_ID = 0X32421;

@Inject
AttributesModel attributesModel;
@Inject
CategoriesModel categoriesModel;
private CompositeDisposable disposable;


@Override
public void onCreate() {
    super.onCreate();

    DaggerUpdateBroadcastReceiverComponent
            .builder()
            .appComponent(((MyApplication) getApplicationContext()).getAppComponent())
            .build()
            .inject(this);
    disposable = new CompositeDisposable();

    Log.e(TAG, "ON create");
}

public static void enqueueWork(Context context, Intent work) {
    try {
        if(work.getIntExtra("test",0) == JOB_ID ){
            enqueueWork(context, UpdateJobScheduler.class, JOB_ID, work);
        } else {
            Log.e(TAG,"INTENT DATA UPDATE WRONG");
        }
    } catch (Exception e){
        Log.e(TAG,"Service collapse");
    }
}

@Override
protected void onHandleWork(@NonNull Intent intent) {
    Log.e(TAG, "working workingg!!!");
}

@Override
public boolean onStopCurrentWork() {
    disposable.clear();
    return super.onStopCurrentWork();
}

我也尝试在我的enqueueWork课程中设置JobInfo,但这不起作用。 另外我读到了将JobScheduler和jobIntentService组合在一起的必要性,它可以在enqueueWork安排服务,但我真的试图找到解决方案,我真的没有找到任何例子从谷歌工作。 在控制台,我看到有一次它无效。

0 个答案:

没有答案