2012-05-08 2 views
5

についての混乱私はAndroidに新しいです...コンテキスト

私は時々私は混乱して作るcontextクラスに直面しなければならない最大時間。それはcontextを使用する一部の場所で 、 どこかでそれはgetApplicationContext()getContext()getBaseContext()によって呼び出されます。

http://www.developer.android.com/このサイトからわかりましたが、理解しづらいものでした。

答えて

2

Androidでは、コンテキストは多くの操作で使用されますが、主にリソースの読み込みとアクセスに使用されます。これは、すべてのウィジェットがコンストラクターでContextパラメーターを受け取る理由です。通常のAndroidアプリケーションでは、通常、コンテキスト、アクティビティ、アプリケーションの2種類があります。これは通常、開発者がコンテキストを必要とするクラスとメソッドに渡す最初のものです。

getApplicationContext()、getContext()、getBaseContext()またはthis(アクティビティクラスの場合)を呼び出すことによってコンテキストを取得できます。コンテキストの

典型的な用途:

  1. は、新しいオブジェクトの作成:新しいビューを作成し、アダプターを、リスナー:

    のTextViewテレビ=新しいのTextView(のgetContext()); Listアダプタアダプタ=新しいSimpleCursorAdapter(getApplicationContext()、...);

  2. 標準の共通リソースへのアクセス: LAYOUT_INFLATER_SERVICEのようなサービス、SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext()getSharedPreferences(モード)。暗黙

  3. アクセスコンポーネント:。。コンテンツプロバイダ、 放送に関しては、意図

    getApplicationContext()getContentResolver()クエリ(URI、...);

    1. の操作を行います。

    あなたはそれがメモリに発生する可能性がありますmaintaningは要するに

    をリークしているため、コンテキストに関連するメモリリークを避けるために、コンテキストを使用するときに注意する必要があり、次のことを覚えています(アクティビティへの参照 はアクティビティ アクティビティと同じライフサイクルを持つ必要があります)

  4. は、あなたが彼らのライフサイクルを コントロールしていない場合は、
  5. 活動に非静的内部クラスを避け文脈活動するのではなく、コンテキスト・アプリケーションを使用してみてください静的な内部クラスを使用すると、弱い参照を作る 内部の活動に例えばViewRootそのW内部クラスで を行うように、外側のクラスに弱い参照して 静的内部クラスを使用することである
  6. この問題に対する解決策は、ガベージコレクタは、メモリリーク
  7. に対する保険ではありません
関連する問題