私が作成したサービス ライフサイクルで何が起こっているのかを理解するのに少し問題があります。私のアプリケーションは、位置リスナーを開始し、更新された位置を配列に追加することを目的とするサービス「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 アイコンは消えません。
編集:ここに私のマニフェストファイルの興味深い部分がありますサービスが開始された場所からのアクティビティに関する部分
<activity
android:name="com.wayzup.activity.RouteActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop" >
</activity>
そして、私のサービスに関する部分
<service android:name="com.wayzup.services.LocalisationService" >
</service>