我在理解我创建的服务生命周期的情况时遇到了一点问题。我的应用程序声明并使用服务“LocalisationService”,其目标是启动位置侦听器并将更新的位置添加到数组中。
就那么简单。该服务在前台运行。
问题是,如果我通过任务切换器或 Eclipse 手动终止我的应用程序,该服务将保留(GPS 和通知在通知区域中)。没关系,这就是我想要的,如果我点击通知,它将带我回到我的应用程序保存状态。但是现在的问题是,如果我通过单击图标而不是服务通知来启动应用程序,它将从头开始启动应用程序。但它应该将应用程序恢复到最新状态不是吗?就像我点击了服务通知一样。
我像这样启动服务:
Intent i = new Intent(this, LocalisationService.class);
startService(i);
这是服务的代码:
public class LocalisationService extends Service {
private LocationManager locationManager;
private LocationListener locationListener;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Notification notification = new Notification(R.drawable.iconsmall,
"Notification text", System.currentTimeMillis());
notification.flags |= Notification.FLAG_ONGOING_EVENT;
Intent i = new Intent(this, RouteActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);
notification.setLatestEventInfo(this, "Notification title",
"notification message)", pi);
startForeground(1337, notification);
startListenLocation();
return (START_NOT_STICKY);
}
@Override
public void onDestroy() {
stopListenLocation();
stopForeground(true);
}
public void startListenLocation() {
locationManager = (LocationManager) getApplicationContext()
.getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
CurrentRouteManager.getSharedManager().updateWithLocation(
location);
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
200, locationListener);
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 200, locationListener);
}
public void stopListenLocation() {
locationManager.removeUpdates(locationListener);
}
如果我杀死应用程序然后通过服务重新启动它,它将调用 onStartCommand(); 再次。此外,似乎我失去了与位置侦听器的链接,当我在重新启动后销毁服务时,通知图标消失但 GPS 图标没有。
编辑:这是我的清单文件中有趣的部分关于启动服务的活动的部分
<activity
android:name="com.wayzup.activity.RouteActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop" >
</activity>
关于我的服务的部分
<service android:name="com.wayzup.services.LocalisationService" >
</service>