33

Service のインスタンスが 1 つだけ作成されるようにするにはどうすればよいですか?

ロギングでいくつかの機能を確認しました(WeatherServiceはServiceを拡張するクラスです):

Log.i(TAG, "Start  Id:" + WeatherService.this.hashCode());
Log.i(TAG, "End Id:" + WeatherService.this.hashCode());

同じ関数が 2 回実行されている (ダウンロード) と確信している場合でも、異なるハッシュ コードが表示されます。

09-12 01:00:55.195: INFO/WeatherService(7222): Start  Id:1137653208
09-12 01:00:57.235: INFO/WeatherService(7222): Start  Id:1137654296
09-12 01:00:59.035: INFO/WeatherService(7222): Start  Id:1138806536
09-12 01:01:39.085: INFO/WeatherService(7222): End Id:1137654296
09-12 01:01:39.265: INFO/WeatherService(7222): Start  Id:1137654296
09-12 01:02:22.175: INFO/WeatherService(7222): End Id:1137653208
09-12 01:02:24.815: INFO/WeatherService(7222): End Id:1138806536
09-12 01:02:24.836: INFO/WeatherService(7222): Start  Id:1138806536
09-12 01:02:40.275: INFO/WeatherService(7222): End Id:1137654296

私はアクティビティをサービスにバインドしています:

bindService(new Intent(getApplicationContext(),  WeatherService.class)
                               ,mServiceConnection, BIND_AUTO_CREATE);

また、サービスは完了するまで数分間実行できるため、サービスは多くのアクティビティにバインド/作成できます

4

2 に答える 2

32

Service のインスタンスが 1 つだけ作成されるようにするにはどうすればよいですか?

特定の のインスタンスは 1 つしか存在できませんService

同じ機能が 2 回実行されている (ダウンロード中) と確信している場合でも、異なるハッシュ コードが返されます。

thisはありません。Serviceまたは、サービスが破棄され、ログ間で再作成されました。

また、サービスは完了するまで数分間実行できるため、サービスは多くのアクティビティにバインド/作成できます

その後、Serviceおそらく破壊され、再作成されています。サービスを数分間実行する必要がある場合は、 and呼び出しに加えてstartService()andを使用する必要があります。または、バインドする必要がまったくない場合もあります。その場合は、ダウンロードを行うためのバックグラウンド スレッドが自動的に提供されるため、 の使用を検討してください。stopSelf()bindService()unbindService()IntentService

于 2010-09-11T22:43:29.787 に答える
12

私も似たような状況を経験しました。
以下のように書いてあれば、インスタンスを1つ重ねて作成することができます。

bindService(new Intent(getApplicationContext(),  WeatherService.class), mServiceConnection, BIND_AUTO_CREATE);

以下のように一度書いてみてください。

getApplicationContext().bindService(new Intent(getApplicationContext(), WeatherService.class),mServiceConnection, BIND_AUTO_CREATE);
于 2013-02-22T09:26:24.507 に答える