我已经阅读了十几篇关于如何设置独立服务的帖子。
由于我的研究和测试,我做了以下工作:
在我的服务上创建了一个过程标记,因此我的服务应在一个单独的线程中运行:
<service android:name=".Services.S_GPS" android:process="sgps"></service>
设置onStartCommand以返回START_NOT_STICKY并在前台启动服务:
-
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Notification notification = new Notification();
startForeground(1337,notification);
return START_NOT_STICKY;
}
即使在我终止或重新启动应用程序之后,服务也会重新启动:
W / ActivityManager:调度崩溃服务的重启 co.myapp.app/.Services.S_GPS in 1000ms
我的问题是,我还缺少什么来阻止我的服务在应用重启时关闭?我怀疑我仍然做错了,服务正在应用程序的主题中运行。我需要我的服务100%独立于应用程序运行,我不需要他们进行通信(除了应用程序启动它)。
您是否可以建议我在关闭或重新启动应用时如何防止服务崩溃?
更新要通过重新启动来澄清,我的意思是当我重建我的apk到手机。一旦我开始服务,我就会注释掉启动服务的代码。当我重新安装我的apk时,它会终止服务(即使没有代码重新创建它)。服务无法独立于apk重新安装运行吗?
答案 0 :(得分:2)
通过重新启动来澄清我的意思是当我重建我的apk到手机。
如果您卸载,升级或重新安装该应用,则与该应用关联的所有进程都将终止。至少在升级方案中,您可以在ACTION_PACKAGE_REPLACED
的清单中注册接收器以查找并重新启动您的服务,但我还没有尝试过。
服务无法独立于apk重新安装运行吗?
仅当它不在该APK中,而是在单独的APK中的单独应用时。