我在我的应用程序中使用 Job Scheduler API 在特定时间间隔后为我安排作业。应用程序运行时它运行良好。但是,每当用户关闭应用程序或将其从最近的任务列表中清除时,应用程序就会停止,并且计划的作业之后永远不会执行,直到您打开应用程序并从打开的时间再次重新安排它。现在,即使应用程序已关闭或从最近的任务列表中清除,我也希望有人帮助我保持工作的执行。如果有任何替代解决方案,请告诉我。我正在寻找过去 3 天的解决方案。尝试了 StackOverFlow 和其他网站上开发人员所说的所有内容,但没有一个对我有用。这是安排工作的地方!ComponentName componentName = new ComponentName(getActivity().getBaseContext(),WallpaperJobService.class); JobInfo jobInfo = new JobInfo.Builder(777,componentName).setRequiresCharging(sharedPreferences.getBoolean("Charging",false)).setRequiredNetworkType(sharedPreferences.getBoolean("Wifi",false) ? JobInfo.NETWORK_TYPE_UNMETERED : JobInfo.NETWORK_TYPE_ANY) .setPeriodic(sharedPreferences.getInt("Duration",15) * 60 * 1000) .setPersisted(true) .build(); JobScheduler scheduler = (JobScheduler) getContext().getSystemService(Context.JOB_SCHEDULER_SERVICE); scheduler.schedule(jobInfo);我的工作服务类:public class WallpaperJobService extends JobService {private boolean jobCancelled;private SharedPreferences sharedPreferences;private SharedPreferences.Editor editor;@Overridepublic boolean onStartJob(JobParameters params) { Log.i("WallpaperJobService", "Job started!"); changeWallpaper(params); return true;}private void changeWallpaper(final JobParameters params) { final ArrayList<Image> images = (ArrayList<Image>) MainActivity.favoritesRoomDatabase.roomDao().getAllFavoriteWallpapers(); sharedPreferences = getSharedPreferences("GridSize", MODE_PRIVATE); editor = sharedPreferences.edit(); if (images != null && images.size() != 0) { if (sharedPreferences.getInt("Index", 0) == images.size()) { editor.putInt("Index", 0); editor.commit(); }
1 回答

白衣非少年
TA贡献1155条经验 获得超0个赞
当在后台定期做一些事情时—— 、、、、JobScheduler
FCM推送消息等——你必须考虑到你的进程可能不在你工作的时候。Android 会为你创建一个进程,但它是“从头开始”的。您的 UI 可能已在内存中设置的任何内容(例如数据库)都将用于某些先前的进程,并且可能不会在新进程中设置。WorkManager
AlarmManager
添加回答
举报
0/150
提交
取消