我在理解我创建的服务生命周期中发生的事情时遇到了一些问题。 我的应用程序声明并使用服务“LocalisationSevice”,其目标是启动位置监听器并将更新的位置添加到阵列。
这很简单。服务运行前台。
问题是,如果我通过任务切换器或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图标。
编辑:这是我的Manifest文件中有趣的部分 关于服务开始的活动的部分
<activity
android:name="com.wayzup.activity.RouteActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop" >
</activity>
关于我服务的部分
<service android:name="com.wayzup.services.LocalisationService" >
</service>