2

重複の可能性:
Android - コンテキストを取得するさまざまな方法の違いは何ですか?

thisClassName.thisgetApplicationContext()またはの使用の違いを知りたいmyContextです。

以下のトーストでコンテキストとしてそれぞれを使用すると、どのような影響がありますか?

public class ClassName extends Activity {
    final ClassName myContext = this;
    ...
    public void onCreate(Bundle savedInstanceState) {
    ...
    button.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "This is a toast", Toast.LENGTH_LONG).show();
        }

    });
    }

コンテキストの詳細な説明を教えてもらえますか? ここでRomain Guy の投稿を読みました。たぶん、さらにいくつかの例が役立つかもしれません:)

4

2 に答える 2

1

ActivityApplicationはどちらも Context クラスから派生しています。したがって、thisコードが Activity クラスまたは Application クラスの一部である場合、Context オブジェクトの代わりに使用できます。これらのいずれかの外側 (たとえば、 FragmentgetActivity()内) を呼び出して、囲んでいる Activity を取得できます (それを Context として使用できます)。getApplicationContext() は、アクティビティがそれ自体よりも広いコンテキストを取得する方法です。Context を取得した Activity の存続期間を超えて Context を使用する必要がある場合 (たとえば、実行時間の長いバックグラウンド スレッドに渡す場合) に、これが必要になることがあります。

Toast に Application コンテキストはおそらく必要ありません。ただし、それを使用することで、Toast は表示されたままになり、Activity を開始した場所から離れてもクラッシュすることはありません。

于 2012-07-23T08:41:03.243 に答える
1

アプリケーション コンテキストはアプリケーションのライフサイクルに結び付けられ、アクティビティ コンテキストはアクティビティのライフサイクルに結び付けられます。したがって、それぞれにスコープがあり、そのレベルで情報を取得するために使用する必要があります。

通常、ライフサイクルが現在のアクティビティとは別のコンテキストが必要な場合を除き、常にアクティビティ コンテキストを使用する必要があります。

メモリ リークにつながる可能性があるのは、Application Context の使用であり、それをガベージ コレクションする必要があるオブジェクトにバインドしますが、この関連する属性 (アプリ コンテキスト) を保持すると、それらは収集されなくなります。

于 2012-07-23T08:23:05.647 に答える