我做了一些研究,发现我们可以使用Android services在bakground中运行服务。
现在我想保持服务运行,即使我关闭了我的主应用程序(并将其从recent apps
列表中删除)。然后,如果我想查看服务状态,我必须重新打开我的应用程序并检查后台服务的状态
1)是否可以在Android
中执行此操作2)如果是,我怎么能这样做?我只需要一个全球性的步骤。无需细节。
请注意我的后台服务应该访问网络和磁盘
答案 0 :(得分:2)
你可以覆盖Service.onStartCommand()回调,这里的关键部分是函数返回的新结果代码,告诉系统如果它的进程在运行时被杀死它应该对服务做什么:
START_STICKY 如果此服务的进程在启动时被终止(从onStartCommand(Intent,int,int)返回后),则将其保持在启动状态但是不要保留这个意图。稍后系统将尝试重新创建服务。因为它处于启动状态,所以它将保证在创建新服务实例后调用onStartCommand(Intent,int,int);如果没有任何待处理的启动命令要传递给服务,则将使用空的intent对象调用它。
只是这段代码
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
请检查此service api changes,尤其是“服务生命周期更改”部分。
答案 1 :(得分:1)
1) Is it possible to do that in Android
在使用Android后台服务多年后,我认为第一个问题的答案是YES
。
2) If yes How I can do that? I Just need a global steps. No need for details.
我建议您运行服务并从START_STICKY
返回onStartCommand(Intent, int, int)
。这样做只会确保您的服务仅在 SYSTEM (即Android操作系统) KILLED 时重新创建。我已经看到,开发人员建议使用单独的警报来定期检查服务状态,如果由于某种原因停止服务,则重新运行服务。
但是,用户可以控制他们的设备,他们可以随时停止服务。此 DOESN' T 表示如果用户关闭应用程序并将其从最近的应用列表中删除,则该服务将 KILLED 。仅当用户 Forcce停止来自应用程序管理器的应用程序时,才会销毁该服务。在这种情况下,您的服务无法重新启动,直到用户再次启动应用程序,并且系统也会停止警报。
希望它有所帮助!!