0

我在理解我创建的服务生命周期的情况时遇到了一点问题。我的应用程序声明并使用服务“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>
4

0 回答 0