アクティビティとコンテキストの違いは何ですか?


91

アクティビティとコンテキストは同じですか、それとも違いがありますか?

アクティビティを渡すメソッドとコンテキストはいつ必要ですか?


@Egor Thnxの人、そして私はそれに気をつけます。質問する前に..もう1つの質問で私を助けることができます
。Android

質問をクリアするには、以下のディスカッションを確認してください
Egor

残念ながら、これらの答えはどれも完全ではありません。これは、グーグル検索のためにポップアップする最初のアイテムです。
SMBiggs 2016年

回答:


118

私が理解している限り: コンテキストはベースオブジェクトです。したがって 、アプリケーションと同じすべてのアクティビティは、コンテキストから派生します。これは、すべてのアクティビティとすべてがISであることを意味します。ApplicationContext

アクティビティからdeveloper.android.com

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.view.ContextThemeWrapper
               android.app.Activity

そしてアプリケーション

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.app.Application

アプリケーションコンテキストは、アプリが有効onDestroyである限り存続しますが、アクティビティコンテキストはアクティビティで終了します(そのアクティビティの後は無効になります)。

そのため、アクティビティ全体(つまり、シングルトン)でコンテキストが必要な場合は、アプリケーションコンテキストを使用するほうがよいでしょう。

通常、コンテキストが予想されるAndroid Frameworkメソッドでは、どちらを渡しても違いはありません。ただし、コンテキストへの長期にわたる参照を維持する場合は、常にMemoryLeaksに注意してください。


2
はい、申し訳ありません。リンクを確認しました。確かに、ContextはActivityのスーパークラスです。とにかく、ActivityがContextであると言うことは完全に正しくありません。Activityはより複雑なオブジェクトですが、Contextは情報を保持し、リソースへのアクセスを提供する単なるブロックです。
エゴール

@Rafael T Thnxが適切な回答をしてくれた
Android

17
私がオブジェクト指向言語に言及するなら、それは完全に正しいです。JavaのすべてのオブジェクトはObject.classから派生するので、FACTではすべてがオブジェクトです。より具体的に言うと、Activityはコンテキストの特殊化です。抽象クラスの動物と、動物(猫、犬)に由来する2つのクラスがある場合、これらの2つは少なくとも動物です。動物が必要とされるところはどこでも、猫や犬を渡すことは問題ありません。私に投票する前に情報を確認してください
Rafael T

1
「アプリが有効である限り、アクティビティコンテキストは持続しますが、アクティビティコンテキストはアクティビティで終了します」はオフのようです。最初はアプリケーションコンテキストにすべきではありませんか?
FirstOne

8

あなたがAndroidドキュメントで見ることができるように:

Activityクラスは「ContextThemeWrapper」から拡張されたもので、これは「ContextWrapper」から拡張されたもので、「ContextWrapper」から拡張されたものです。

だから、はい、アクティビティはコンテキストを拡張します!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.