当我的应用程序处于空闲状态时,即没有人正在使用该应用程序或者它已关闭但是后台服务正在连续运行。我有问题,我的应用程序中的后台服务崩溃了。它只发生了两次。它不会定期发生。我在Crashlytics上没有任何堆栈跟踪,但只有崩溃报告显示应用程序在RelativeLayout
接口函数Runnable
上崩溃(附加屏幕截图)
run()
由于内存不足,操作系统是否可以终止后台服务?
答案 0 :(得分:0)
这只是一个建议,而不是您问题的解决方案
使用JobService而不是使用后台服务可能更好。他们对Android Oreo及以上的后台服务有很多限制
答案 1 :(得分:0)
这种实现很可能存在许多问题。在现代版本的Android上阻止后台服务,甚至在运行类似服务的旧版本上(使用Runnable循环)也非常容易出错。
自2018年起,运行计划任务的最佳实践方法是使用Android体系结构组件中的WorkManager库。
WorkManager选择合适的方式来安排后台任务 - 根据设备API级别和包含的依赖关系,WorkManager可能使用JobScheduler,Firebase JobDispatcher或AlarmManager。您不需要编写设备逻辑来确定设备具有哪些功能并选择适当的API;相反,您可以将您的任务交给WorkManager,让它选择最佳选项。
https://developer.android.com/topic/libraries/architecture/workmanager
您可以定义这样的任务
public class CustomWorker extends Worker {
...
}
然后像这样安排
new PeriodicWorkRequest.Builder photoWorkBuilder =
new PeriodicWorkRequest.Builder(CustomWorker.class, 12,
TimeUnit.HOURS);
// ...if you want, you can apply constraints to the builder here...
// Create the actual work object:
PeriodicWorkRequest work = customWorkerBuilder.build();
// Then enqueue the recurring task:
WorkManager.getInstance().enqueue(work);