我正在开发一个应用程序,我需要在应用程序启动时启动后台服务 .
最初我在Application.onCreate()方法上添加了第一个服务的启动过程 .
之后,我意识到如果用户因任何原因停止了后台线程,我需要重新启动该服务 . 因此,我将服务启动代码从Application.onCreate()移动到主要的Activivity.onResume() .
根据文档,在已经运行的服务上调用startService()没有问题 .
在那之前,一切都很好 . 我的第一个后台服务实施得很好 . 当它启动时,它会创建一个新线程来运行后台处理而不会出现重大问题 .
实施第一项服务后,我转到第二项服务 . 这里没问题 . 但在实现它并在Activity.onResume()方法上添加了服务启动调用之后 .
private void startServices() {
startTrackingService();
startBacklogService();
}
private void startTrackingService() {
if (Z10.DEBUG) {
Log.i(LOG_TAG, "REQUESTING TRACKING SERVICE START");
}
Intent serviceLauncher = new Intent(Main.this, TrackingService.class);
startService(serviceLauncher);
if (Z10.DEBUG) {
Log.i(LOG_TAG, "TRACKING SERVICE START REQUESTED");
}
}
private void startBacklogService() {
if (Z10.DEBUG) {
Log.i(LOG_TAG, "REQUESTING BACKLOG SERVICE START");
}
Intent serviceLauncher = new Intent(Main.this, BacklogService.class);
startService(serviceLauncher);
if (Z10.DEBUG) {
Log.i(LOG_TAG, "BACKLOG SERVICE START REQUESTED");
}
}
此代码阻止主要方法,必须杀死应用程序 .
试图调试应用程序(没有android源代码!!!这很困难),我意识到startService并没有真正启动服务,它只是在Looper队列上添加了要处理的操作 .
如果,我按顺序执行两个startService操作,主线程阻塞,但如果在主线程上做其他事情(UI相关),然后启动第二个服务,它就可以正常工作 .
问题是我真的需要在应用程序启动时启动这两个服务,或者在主活动恢复上重新启动它们 .