1. ホーム
  2. android

[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。

2022-07-04 23:22:05

質問

私はアンドロイドの初心者で、以下の違いを理解しようとしています。 getApplication() , getApplicationContext( ), getBaseContext() , getContext()someClass.this の2つのメソッドがあり、特に以下のコードラインでは、これらのメソッドをいつ使うかについて説明しています。

トーストを起動するとき、これらの違いは何ですか、そしてどのような場合にこれらを使用するのですか?

Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show();

インテントと同じです。

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
Intent intent = new Intent(MenuPagina., LoginActivity.class);
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
Intent intent = new Intent(getApplication(), LoginActivity.class);

どのように解決するのですか?

トースト そして インテント を参照する必要があります。 コンテキスト . また getApplication , getApplicationContext , LoginActivity.this そして getBaseContext で、これらはすべてコンテキストへの参照を提供します。

ここで混乱するのは、異なるコンテキストの宣言とその具体的な使用方法です。物事を簡単にするために、Androidフレームワークで利用可能なコンテキストの2つのタイプを数える必要があります。

  1. アプリケーションコンテキスト
  2. アクティビティコンテキスト

アプリケーション コンテキストはアプリケーションのライフサイクルに付随しており、アプリケーションの寿命が尽きるまで常に同じです。ですから、もしあなたが トースト を使用する場合は、アプリケーションコンテキストまたはアクティビティコンテキスト(両方)を使用することができます。

アクティビティ コンテキストは Activity のライフサイクルに付属しており、破棄する場合は Activity の onDestroy() が発生した場合に破棄される。新しいアクティビティを起動したい場合、アクティビティのコンテキストをその インテント を使用して、新しい起動アクティビティが(アクティビティスタックの観点から)現在のアクティビティに接続されるようにする必要があります。しかし、新しいアクティビティを起動するために、アプリケーションのコンテキストを使用することもできますが、その場合は、フラグを設定する必要があります。 Intent.FLAG_ACTIVITY_NEW_TASK を設定する必要があります。

では、あなたのケースを参照してください。

LoginActivity.this は、Activityクラスを継承した独自のクラスを参照していますが、ベースクラス(Activity)はContextクラスも継承しているので、アクティビティコンテキストを提供するために使用することができます。

getApplication() はApplicationオブジェクトを参照していますが、ApplicationクラスはContextクラスを継承しているので、アプリケーションコンテキストを提供するために使用することができます。

getApplicationContext() はアプリケーションのコンテキストを提供します。

getBaseContext() はアクティビティコンテキストを提供します。

ヒント を操作する必要があるときはいつでも Views を操作する必要があるときは アクティビティコンテキスト で、それ以外は アプリケーションコンテキスト で十分でしょう。