我们扩展了Application
类,并将其用于整个应用程序中的某些操作,并且该类也可以运行
Intent serviceIntent = new Intent(getApplicationContext(), Service.class);
startService(serviceIntent);
在它的onCreate中。它进一步绑定到服务,并为不同的活动提供服务。这会触发onStartCommand
,意在提供服务。当应用程序进入后台时,该服务将变为前台服务。
但是,在极少数情况下,操作系统会破坏我们的服务,因此会重新启动该服务(由于状态恶劣)。然后,这会无意中触发onStartCommand
。它还触发了我们的Application
的重新启动,并且它的onCreate
运行又重新启动了服务并有意触发onStartCommand
。
处理此问题的最佳方法是什么?我是否应该无意地忽略onStartcommand
(由操作系统启动的那个),并依靠Application
重新分配和启动服务?
还有一个问题。从API 26开始,我们不允许在应用程序处于后台状态时启动后台服务(每当应用程序处于后台状态时都需要startForegroundService
)。当我们的粘性服务重新启动并重新启动应用程序时,我们确实可以简单地运行startService
,而Android不会抱怨以错误的状态运行它。有人对此有见识吗?我希望会引发异常。