Android上的“上下文”是什麼?


Answers

上下文的定義::

  • 上下文表示環境數據
  • 它提供對諸如數據庫之類的東西的訪問

簡單的術語::

  • 考慮Person-X是初創軟件公司的首席執行官。

  • 公司裡有一位首席架構師,這位首席架構師負責公司所有涉及諸如數據庫,UI等的工作。

  • 現在,CEO聘請了一位新開發人員。

  • 建築師根據新人的技能來講述新僱用人員的責任,不管他是否會從事數據庫或UI等工作。

簡單的術語::

  • 這就像android活動訪問應用程序的資源。

  • 這與您訪問酒店時相似,您需要在適當的時間點享用早餐,午餐和晚餐,對嗎?

  • 在逗留期間,您還喜歡其他許多東西。 你如何得到這些東西?

  • 你問房間服務人員為你帶來這些東西。

  • 這裡的客房服務人員是考慮到你是單身活動和酒店是你的應用程序的情況下,最後的早餐,午餐和晚餐必須是資源。

涉及上下文的事情是:

  1. 加載資源。
  2. 啟動一項新活動。
  3. 創建視圖。
  4. 獲得系統服務。

上下文是ActivityServiceApplication ....等的基類

描述這種情況的另一種方式是:考慮上下文,因為電視中的電視和頻道的遠程資源,服務,使用意圖等。 - 這裡,遠程用作訪問,以將所有不同資源訪問到前景中。

  • 所以,Remote可以訪問諸如資源,服務,使用意圖等渠道....
  • 同樣,誰擁有遠程訪問權限,可以訪問所有資源,服務,使用意圖等

您可以通過其獲取上下文的不同調用方法

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • 或者this (當在活動課上的時候)

例:

TextView TV=new TextView(this);

this - >指的是當前活動的上下文。

Question

在Android編程中, Context類是什麼,它用於什麼?

我在開發者網站上閱讀了它,但我無法清楚地理解它。




Context means component (or application) in various time-period. If I do eat so many food between 1 to 2 pm then my context of that time is used to access all methods (or resources) that I use during that time. Content is an component (application) for particular time. Context of components of application keeps changing based on the underlying lifecycle of the components or application. For instance, inside the onCreate() of an Activity ,

getBaseContext() -- gives the context of the Activity that is set (created) by the constructor of activity. getApplicationContext() -- gives the Context setup (created) during the creation of application.

Note: <application> holds all Android Components.

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

It means, when you call getApplicationContext() from inside whatever component, you are calling the common context of the whole application.

Context keeps being modified by the system based on the lifecycle of components.




與應用程序環境的全局信息的接口。 這是一個抽像類,其實現由Android系統提供。 它允許訪問特定於應用程序的資源和類,以及對諸如啟動活動,廣播和接收意圖等應用程序級操作的上調。




Context in Android is an interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.




簡單的例子來理解android中的context

每個老闆都有一位助理照顧,做所有不那麼重要和耗時的工作。 如果需要一個文件或一杯咖啡,助理正在運行。 有些老闆幾乎不知道辦公室裡發生了什麼,所以他們也會問他們的助手。 他們自己做一些工作,但對於大多數其他事情他們需要助手的幫助。

在這種情況下,

老闆 - 是Android應用程序

助理 - 是上下文

文件/咖啡 - 是資源

當我們需要獲取有關應用程序的不同部分的信息時,我們通常會調用上下文,如“活動”

涉及上下文的一些操作(需要助理的事情):

加載公共資源創建動態視圖顯示Toast消息啟動活動等獲取上下文的不同方式:

getContext()

getBaseContext()

getApplicationContext()

this



Context就是我們大多數人所稱的應用程序 。 它是由Android系統製作的,並且只能執行應用程序的功能。 在Tomcat中,Context也是我所說的應用程序。

有一個持有許多活動的上下文,每個活動可能有許多視圖。

顯然,有些人會說它不適合這個或那個,他們可能是正確的,但是說一個Context是你當前的應用程序將幫助你理解你在方法參數中的內容。




上下文基本上是用於資源訪問和獲取應用程序(用於應用程序上下文)或活動(用於活動上下文)或任何其他的環境細節...

為了避免內存洩漏,您應該為需要上下文對象的每個組件使用應用程序上下文....更多信息,請點擊here




上下文是對當前對象的引用。 此外,上下文允許訪問有關應用程序環境的信息。




ANDROID AND CONTEXT如果您仔細查看各種Android API,您會注意到其中許多人將android.content.Context像作為參數。 你還會看到一個Activity或者一個服務通常被用作一個Context。 這是可行的,因為這兩個類都是從Context開始的。

什麼是上下文? 根據Android參考文檔,它是一個表示各種環境數據的實體。 它提供對本地文件,數據庫,與環境相關的類加載器的訪問,包括系統級服務在內的服務等。 在本書的整個過程中,在您使用Android進行日常編碼時,您會看到經常傳遞的上下文。 來自:“Android實踐”書。




In Java, we say this keyword refers to the state of the current object of the application.
Similarly, in an alternate we have Context in Android Development.

This can be defined either explicitly or implicitly,

Context con = this;

getApplicationContext();

getBaseContext();

getContext();



把簡單的Androids Context弄得一塌糊塗,除非你不再擔心,否則你不會愛上它。

Android Context是:

  • 神的對象。

  • 當你開始為Android開發時,你想要傳遞所有的應用程序,但是當你接近編程,測試和Android本身時,會避免這樣做。

    • 不明確的依賴。

    • 內存洩漏的常見原因。

    • PITA進行測試。

  • Android系統用於分派權限,資源,偏好,服務,廣播,樣式,顯示對話框和充氣佈局的實際上下文。 而且你需要不同的Context實例來完成一些單獨的事情(顯然,你不能從應用程序或服務上下文中顯示對話框;從應用程序和活動上下文中誇大的佈局可能不同)。




可以將其視為運行應用程序或服務的虛擬機。獨立環境可以訪問大量底層系統信息和某些允許的資源。 你需要這種背景才能獲得這些服務。




Context is context of current state of the application/object. Its an entity that represents various environment data. Context helps the current activity to interact with out side Android Environment like local files, databases, class loaders associated to the environment, services including system-level services, and more.

A Context is a handle to the system. It provides services like resolving resources, obtaining access to databases and preferences, and so on. An android app has activities. It's like a handle to the environment your application is currently running in. The activity object inherits the Context object. Examples for uses of context :

  1. Creating New objects: Creating new views, adapters, listeners

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
    
  2. Accessing Standard Common Resources: Services like LAYOUT_INFLATER_SERVICE, SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE) 
    getApplicationContext().getSharedPreferences(*name*, *mode*);
    
  3. Accessing Components Implicitly: Regarding content providers, broadcasts, intent

    getApplicationContext().getContentResolver().query(uri, ...);
    

Difference between Activity Context and Application Context :

They are both instances of Context , but the application instance is tied to the lifecycle of the application, while the Activity instance is tied to the lifecycle of an Activity. Thus, they have access to different information about the application environment.

If you read the docs at getApplicationContext it notes that you should only use this if you need a context whose lifecycle is separate from the current context.

But in general, use the activity context unless you have a good reason not to.

Need of Context :

The documentation says that every view needs the context to access the right resources (eg the theme, strings etc.).

But why in the constructor and not through setContentView(View)?

1.Because the resources must be accessible while the view is being constructed (the constructor will need some resources to fully initialise the view).

2.This allows the flexibility of using a context that is different from the one of the current activity (imagine a view that uses some other string resources and not the ones from the current activity).

3.The designers of the Android SDK seem to have chosen that the context must be set only once and then stay the same throughout the lifetime of the view. Why context is not determined automatically at construction point?

1.Because there exists no static variable that would tell you the current global context of your application. The method getApplicationContext() is the closest to this, but it's not static, so you need an instance of the Activity object to call it.

2.The Java language provides an option to look through the call stack and find whether the View has been constructed in a Context class. But what if there are many? Or what if there are none? This method is very expensive and error prone. So the designers of the API decided that a context must be manually provided.




上下文是類android.content.Context的實例提供到執行應用程序的Android系統的連接。 例如,您可以通過上下文檢查當前設備顯示的大小。

它還可以訪問項目的資源。 它是有關應用程序環境的全局信息的接口。

Context類還提供對Android服務的訪問,例如,警報管理器觸發基於時間的事件。

活動和服務擴展了Context類。 因此他們可以直接用於訪問上下文。




上下文是系統的句柄; 它提供的服務包括解析資源,獲取數據庫和首選項等等。 一個Android應用程序有活動。 上下文就像您的應用程序當前正在運行的環境的句柄。活動對象繼承了上下文對象。

有關更多信息,請參閱使用Android Studio進行Android開發簡介 - 教程




Links