当该应用被杀死时,工作调度程序和工人会被销毁



试图将视频压缩放置在后台,但应用被杀死WorkManagerJobSchedular被销毁

如何解决此问题?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    ComponentName componentName = new ComponentName(ConcatVideoActivity.this, ConcatVideoJobServiceRepository.class);
                    JobInfo jobInfo;
                    PersistableBundle bundle = new PersistableBundle();
                    bundle.putString(FIRST_IMG, doctorCredentialModel.getDoctorFrontimg().replaceAll(" ", "%20"));
                    bundle.putString(LAST_IMG, doctorCredentialModel.getDoctorBackimg().replaceAll(" ", "%20"));
                    bundle.putString(VIDEO_URL, doctorCredentialModel.getVidUrl());
                    if(doctorCredentialModel.getDoctorName()!=null){
                        bundle.putString(DR_NAME, doctorCredentialModel.getDoctorName());
                    }else{
                        bundle.putString(DR_NAME,getString(R.string.app_name));
                    }
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                        jobInfo = new JobInfo.Builder(12, componentName)
                                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                                .setPersisted(true)
                                .setExtras(bundle)
                                .build();
                    } else {
                        jobInfo = new JobInfo.Builder(12, componentName)
                                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                                .setPersisted(true)
                                .setExtras(bundle)
                                .build();
                    }
                    try {
                        JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
                        int resultCode = jobScheduler.schedule(jobInfo);
                        if (resultCode == JobScheduler.RESULT_SUCCESS) {
                            Log.d("JOB SECHEDULED", "Job scheduled!");
                        } else {
                            Log.d("JOB NOT SECHEDULED", "Job not scheduled");
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }


@Override
public boolean onStartJob(JobParameters jobParameters) {
    Log.d(TAG, "Job started!");
    firstImg = jobParameters.getExtras().getString(FIRST_IMG);
    secondImg = jobParameters.getExtras().getString(LAST_IMG);
    videoUrl = jobParameters.getExtras().getString(VIDEO_URL);
    drName = jobParameters.getExtras().getString(DR_NAME);
    loadFFMpegBinary(jobParameters);
    isWorking = true;
    // We need 'jobParameters' so we can call 'jobFinished'
   // startConcatVideo(jobParameters); // Services do NOT run on a separate thread
    Toast.makeText(this, "Video Customization InProgress ", Toast.LENGTH_SHORT).show();
    return isWorking;
}

Workmanager在API级别23 上运行时使用JobsCheduler,对于较旧的操作系统,它使用了AlarmManager和Broadcastreceivers的组合。API级别21-22上的JobsCheduler在某些设备上存在一些实施问题,这就是Workmanager仅在棉花糖上使用JobsCheduler的原因。

因此,对于API 23级以上的工人和Jobscheduler的行为也是如此。使用Workmanager的优势在于,大多数功能都可以从API级别14开始。

关于您的问题,您没有指定您看到此问题的设备。您是否尝试使用库存的Android图像在模拟器上运行样品,以查看问题是否存在?

可能影响您的背景工作的另一件事是Jobscheduler(和Workmanager)对背景工作的10分钟限制。10分钟后,您的工作停止了。

一些设备制造商已决定修改库存的Android,以强制该应用程序。这就是为什么工人会停止工作的原因(Jobscheduler,警报,广播接收器等)。没有办法解决这个问题。不幸的是,一些设备制造商这样做,因此在这些情况下,工作人员将停止工作,直到下次启动应用程序为止。

这是在Workmanager的Issuetracker上报告的。

最新更新