3

LocationListenerと呼ばれるサービスで問題が発生していますmyService

これが私のコードです:

///onStart method ..
onStart() {
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE)
    .
    .
    provider = locationManager.getBestProvider(criteria, true);
    locationListener = (LocationListener) new MyLocationListener();
    locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
}

私のアクティビティには、サービスを停止するボタンがあります。私がしているボタンをクリックすると:

stopService(new Intent(getApplicationContext(), myService.class)

私が持っているmyService.javaファイルには:

////onDestroy method....
onDestroy() {
    locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.removeUpdates(locationListener); //Getting **exception here ....
}

次の例外が発生します。

java.lang.IllegalArgumentException: listener==null at android.location.LocationManager.removeUpdates(LocationManager.java:799) at 
<.package_name>myService.onDestroy(myService.java:407) 

なぜリスナーが理由もなくnullになるのかわかりません。どこが悪いのか教えてください!

4

2 に答える 2

1

Android システムは、メモリが少なく、ユーザー フォーカスのあるアクティビティのためにシステム リソースを回復する必要がある場合にのみ、サービスを強制停止します。サービスがユーザー フォーカスを持つアクティビティにバインドされている場合、サービスが強制終了される可能性は低くなります。また、サービスがフォアグラウンドで実行されるように宣言されている場合 (後述)、サービスが強制終了されることはほとんどありません。それ以外の場合、サービスが開始されて長時間実行されている場合、システムは時間の経過とともにバックグラウンド タスクのリスト内での位置を下げ、サービスは強制終了の影響を非常に受けやすくなります。システムによる再起動を適切に処理します。システムがサービスを強制終了した場合、リソースが再び利用可能になるとすぐにサービスを再起動します (ただし、これは、後で説明するように、onStartCommand() から返される値にも依存します)。

于 2012-12-18T22:17:10.987 に答える
0

私はここを離れている可能性がありますが、おそらくあなたのサービスは殺されており、(後で)再起動されているようです。インスタンス化のものをに移動してみませんonCreate()か?

于 2010-01-28T17:55:06.570 に答える