Android前台服务丢失上下文

时间:2012-09-24 11:57:42

标签: java android service multitasking foreground

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

0 个答案:

没有答案