4

実装者が開発者にコンテキストを渡すことを決定した理由について疑問に思っています (システム サービスは開発者にとってシングルトンのように見えますが、私たちはほとんど気にしません)。

LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(layout);

コンテキストをいじるたびにメモリ/コンテキストがリークするという暗黙の恐れがあるため、これをさらに尋ねています。ここでコンテキストを誤って処理する可能性はありますか?

4

3 に答える 3

5

Android では、アプリのコンテキストは基本的にシステム サービスに接続するパイプのようなものです。多くのシステム サービスはシングルトンですが、任意にアクセスすることはできません。Context クラスは、必要なサービスを受け取って渡す仲介者として機能します。

LayoutInflater.from(context);context.getSystemService()アプリケーションの提供されたコンテキストを使用して呼び出します。

本質的に、アプリと Android は同時に実行される 2 つの別個のものであり、Context はそれらを接続するパイプとして追加されます。

于 2013-11-04T06:21:54.010 に答える
1

すべての Android サービスにはコンテキストが必要だからです。LayoutInflater は Android サービスです。これに関する別の宣言;

 LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
于 2013-11-04T06:16:20.373 に答える
1

Androidのドキュメントに従って:

コンテキスト: アプリケーション環境に関するグローバル情報へのインターフェイス。これは、Android システムによって実装が提供される抽象クラスです。アプリケーション固有のリソースとクラスへのアクセス、およびアクティビティの起動、インテントのブロードキャストと受信などのアプリケーションレベルの操作のアップコールを許可します。

したがって、「コンテキスト」には異なる環境パラメーターが保持されます。これらのパラメータは、アプリケーションとシステムに大きく依存します。

「開発者がコンテキストを渡すことを実装者が決定した理由」

アクティビティを作成したり、ダイアログやサービスなどを作成したりすると、Android でいくつかの異なる環境プロパティが必要になります。したがって、これらすべての情報を提供し、操作に応じて内部でさまざまなタスクを実行できるものがあるはずです。Android では、コンテキストがそれを行います。

例: Android でブロードキャストを送信すると、さまざまなアクティビティやアプリケーションのすべてのブロードキャスト レシーバーによって受信されます。管理していなくても使用できるこれらのことは、すべて Android によって既に管理されているため、私たちはほとんど気にしません。

コンテキストはシステムによって提供されるため、メモリ リークをあまり気にする必要はありません。さまざまな公開パラメーター ( http://developer.android.com/reference/android/content/Context.html ) を調べると、設定または取得できるほとんどのものを見つけることができます。機能もアプリケーションレベルであり、システムレベルではありません。したがって、実際にはコンテキストではなく、コードに注意する必要があります。

于 2013-11-04T06:33:15.687 に答える