3

重複の可能性:
アクティビティ コンテキストとアプリケーション コンテキストの違い

コンテキストとアクティビティをいつ使用するか。以下のように、コンテキストとアクティビティの両方をコンストラクターのパラメーターとして使用するコードを読みました。

public AmazedView(Context context, Activity activity) {
        super(context);

        mActivity = activity;

        // init paint and make is look "nice" with anti-aliasing.
        mPaint = new Paint();
        mPaint.setTextSize(14);
        mPaint.setTypeface(mFont);
        mPaint.setAntiAlias(true);

        // setup accelerometer sensor manager.
        mSensorManager = (SensorManager)                activity.getSystemService(Context.SENSOR_SERVICE);
        // register our accelerometer so we can receive values.
        // SENSOR_DELAY_GAME is the recommended rate for games
        mSensorManager.registerListener(mSensorAccelerometer, SensorManager.SENSOR_ACCELEROMETER,
                SensorManager.SENSOR_DELAY_GAME);

        // setup our maze and marble.
        mMaze = new Maze(mActivity);
        mMarble = new Marble(this);

        // load array from /res/values/strings.xml
        mStrings = getResources().getStringArray(R.array.gameStrings);

        // set the starting state of the game.
        switchGameState(GAME_INIT);
    }
4

3 に答える 3

13

Context:はシステムへのハンドルです。コンテキストには、ローカルファイル、データベースなどの環境データが含まれます。コンテキストには、多くのシステムサービスも含まれます。たとえば、コンテキストはLocation Service、...へのアクセスを提供します。また、コンテキストを使用すると、リソース、データベースと設定へのアクセス、ローカルデータ...を使用できます。

Activity:から拡張Contextます。そして、だけActivityでなく、他の多くの拡張Context機能があり、それぞれに、、、などの独自の目的がFragmentActivityありServiceますWallpaperService。詳細についてはActivity、「通常の」Androidアプリにアクティビティがあります。これは、アプリケーションが現在実行されている環境へのハンドルのようなものですActivity。UI(ユーザーインターフェイス)を作成できます。

上記のコードでは、他のコンストラクターに依存contextしているため、に配置またはactivityオブジェクト化する必要があります。ご覧のactivityとおり、同じから取得した場合context、コンストラクターで1つのパラメーターを使用できます

public AmazedView(Context context) {
   Activity activity = (Activity) context;
}

しかし、あなたは見ることができます、それは明確ではなく、実際のオブジェクトを背後に「隠し」ます。はコンテキストのサブクラスであるためActivity、非公式な方法で、Activityコンテキストにはない「追加のもの」がいくつかあります。それをコンテキストオブジェクトとして配置すると、誰もその事実を知らず、コードがあいまいに見えるようになります。さらに、コンテキストはServiceたとえばからになる可能性があり、いつに型キャストするかはわかりませんActivity。したがって、ここでは2つのパラメータを作成するのが適切です。

さらに重要なことに、メモリリークが発生する可能性があるため、アクティビティをコンテキストオブジェクトとして慎重に使用する必要があります。

于 2012-12-14T02:58:08.320 に答える
5

アプリケーションコンテキストとは、アプリケーション環境と、そのすべてのコンポーネントが実行されているプロセスを指します。これにより、アプリケーションはさまざまなビルディングブロック間でデータとリソースを共有できます。アプリケーションコンテキストは、そのコンポーネントがアクティビティ、サービス、またはその他のものであるかどうかに関係なく、このアプリケーションの最初のコンポーネントが起動されるたびに作成されます。アプリケーションは生きています。そのため、アクティビティのライフサイクルとは無関係です。を呼び出すことにより、コンテキストへの参照を簡単に取得できます

  Context.getApplicationContext() or Activity.getApplication()

アクティビティとサービスはすでにコンテキストのサブクラスであるため、すべてのメソッドを継承することに注意してください。

アクティビティは通常、ユーザーがデバイス上で一度に表示する単一の画面です。通常、アプリケーションには複数のアクティビティがあり、ユーザーはそれらの間を行ったり来たりします。そのため、アクティビティはアプリケーションの最も目に見える部分です。

また、これを見ることができます:Androidの「コンテキスト」とは何ですか?

于 2012-12-14T02:41:39.057 に答える
1

Android の開発者ページ: http://developer.android.com/reference/android/content/Context.html には次のように記載されています。

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

ページに記載されているように、Activity は Context の間接的なサブクラスです。

于 2012-12-14T02:33:12.470 に答える