2015-09-05 5 views
6

context.getSystemService()は高価な電話ですか?context.getSystemService()は高価な呼び出しですか?

I.e.ユーザーがインターネットに接続しているかどうかを調べる前に、ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);を使用してHTTPリクエストを実行する少しのhttpネットワーキングライブラリを構築しました(他のhttpネットワーキングライブラリも利用可能です)。

私のhttpライブラリのインスタンス変数(クラスフィールド)としてConnectivityManagerを保存するか、「新しい」ConnectivityManagerを取得するためにhttpリクエストを開始する前に毎回ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);を呼び出す必要がありますか? getSystemService(Context.CONNECTIVITY_SERVICE)を呼び出すたびに同じConnectivityManagerインスタンスが返されますか(つまり、ConnectionMangerをクラスフィールドに格納すると、httpライブラリが長い生存期間のため問題につながる可能性があります) -

答えて

5

私のhttpライブラリのインスタンス変数(クラスフィールド)としてConnectivityManagerを保存する必要がありますか、またはConnectivityManager cm =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)を呼び出す必要があります。私がhttp要求を開始して「新しい」ConnectivityManagerを取得するたびに、

私はインスタンスを保持します。 getSystemService()は実際には呼び出すのに費用がかかるようですが、なぜそれを必要以上に頻繁に呼び出すのですか?

は安全上にある>アプリケーションの実行限り住んでいる - 私のHTTPライブラリは1が長い生きているので、他の言葉で

は、問題へのクラス・フィールド・リードにConnectivityMangerを保存することができますApplicationシングルトン(getApplicationContext())のgetSystemService()と電話してください。 通常のオブジェクトは、getSystemService()によって返されたオブジェクトは、それを作成したContextについて何も知らない。場合によっては、Android 5.0の— CameraManagerがこの欠陥に苦しんでいましたが、これはAndroid 5.1で修正されました。私が入っているコンテキストをシステムサービスオブジェクトが使いこなす場合、私はgetApplicationContext()を使って、パラノイア外のシステムサービスを取得する傾向があります。

(メモリリーク、彼らは私を取得するために出ている!)

は同じConnectivityManagerインスタンスが私であるために

getSystemService(Context.CONNECTIVITY_SERVICE)

呼び出すたびに返されます正直、私は見たことがない。

関連する問題