无论我的 Android 应用程序是运行还是关闭,我都需要保持服务运行(获取最新的位置更新)。
为此,我终于使用了基于通知的前台服务,并且它可以很好地完成这项工作,除非并且直到应用程序关闭。所以会发生什么:
- 当应用程序在 UI 上或后台运行时,服务会完美地获取位置。
- 当应用程序关闭时,即从最近的应用程序中删除,服务会以某种方式重新启动并且无法获取位置更新。
现在,我想了解该服务是由我的应用程序还是由 Android 操作系统启动的。有什么办法可以弄清楚吗?
我尝试了以下方法,但问题是intent
由服务启动时并不总是为空。
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(Constants.TAG + this.getClass().getSimpleName(), "Inside onStartCommand");
if (null == intent) {
Log.w(Constants.TAG, "Service was stopped and automatically restarted by the system.");
BackgroundTaskHandler.startLocationMonitorServiceBySelf(this, 20 * 1000); // start after 20 sec
Log.w(Constants.TAG, "Stopped self. Restarting again via alarm.");
stopSelf();
} else {
// Other piece of code to setup location client
// and configure notification intent
}
return START_STICKY;
}