android-context context用法 - Android上的“上下文”是什麼?




activity取得 get (25)

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

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


Answers

Context是每個應用程序的Sandbox特定於Android的API,它提供訪問應用程序的私有數據,如資源,數據庫,私有文件夾,首選項,設置...

Most of the privatedata are the same for all activities/services/broadcastlisteners of one application.

Since Application, Activity, Service implement the Context interface they can be used where an api call needs a Context parameter


This attribute declares which activity this layout is associated with by default .


Context means current. Context use to do operation for current screen. 恩。
1. getApplicationContext()
2. getContext()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();

android.content.Context提供到Android系統和項目資源的連接。 它是有關應用程序環境的全局信息的接口。

Context還提供對Android服務的訪問,例如定位服務。

活動和服務擴展了Context類。


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


上下文是關於應用程序環境的全局信息的接口。 這是一個抽像類,其實現由Android系統提供。

Context允許訪問特定於應用程序的資源和類,以及調用應用程序級操作,如launching activities, broadcasting and receiving intents, etc.

這裡是例子

 public class MyActivity extends Activity {

      public void Testing() {

      Context actContext = this; /*returns the Activity Context since   Activity extends Context.*/

      Context appContext = getApplicationContext();    /*returns the context of the single, global Application object of the current process. */

      Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
      Context BtnContext = BtnShowAct1.getContext();   /*returns the context of the View. */

有關更多詳細信息,請訪問Context


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

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


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應用程序有活動。 上下文就像您的應用程序當前正在運行的環境的句柄。活動對象繼承了上下文對象。

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


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

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


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

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

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

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


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


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

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

在這種情況下,

老闆 - 是Android應用程序

助理 - 是上下文

文件/咖啡 - 是資源

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

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

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

getContext()

getBaseContext()

getApplicationContext()

this

只是把它放在那里為新手;

所以先了解Word上下文:

在英文中。 它的意思是:

“構成事件,陳述或想法的環境,以及可以充分理解和評估的環境。”

“書面或口語中的某些部分立即在一個詞或一段經文之後,並澄清其含義。”

現在對編程世界有同樣的理解:

應用程序/對象的當前狀態的上下文。 它可以讓新創建的對象了解到底發生了什麼。 通常,您可以通過它來獲取有關程序另一部分的信息(活動,程序包/應用程序)

您可以通過調用getApplicationContext()getContext(), getBaseContext()this (在activity類中)來獲取上下文。

要在應用程序的任意位置使用以下代碼:

在android應用程序中創建新的類AppContext

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

現在,無論何時您希望在非活動類中都可以使用應用程序上下文,請調用此方法並且您擁有應用程序上下文

希望這個幫助;)


上下文是應用程序/對象當前狀態的上下文。它是表示各種環境數據的實體。 上下文幫助當前活動與外部android環境交互,如本地文件,數據庫,與環境關聯的類加載器,包括系統級服務在內的服務等。

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

可以通過其獲取上下文的不同調用方法1. getApplicationContext(),2. getContext(),3. getBaseContext()4.或this(當在activity類中時)。


上下文的定義::

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

簡單的術語::

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

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

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

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

簡單的術語::

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

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

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

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

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

涉及上下文的事情是:

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

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

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

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

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

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

例:

TextView TV=new TextView(this);

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


簡單來說:

顧名思義,它是應用程序/對象當前狀態的上下文。 它可以讓新創建的對象了解正在發生的事情。 通常,您可以通過它來獲取有關程序的另一部分(活動和程序包/應用程序)的信息。

您可以通過調用getApplicationContext()getContext()getBaseContext()this (在從Context擴展的類中,如Application,Activity,Service和IntentService類)來獲取Context

上下文的典型用途:

  • 創建新對象 :創建新視圖,適配器,偵聽器:

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
    
  • 訪問標準的公共資源 :LAYOUT_INFLATER_SERVICE,SharedPreferences之類的服務:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(*name*, *mode*);
    
  • 隱式訪問組件 :關於內容提供者,廣播,意圖

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

只要你反思,想一想。

與應用程序環境的全局信息的接口。 這是一個抽像類,其實現由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();

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

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

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

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


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

Android Context是:

  • 神的對象。

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

    • 不明確的依賴。

    • 內存洩漏的常見原因。

    • PITA進行測試。

  • 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.


  • 上下文表示獲取環境數據的句柄。
  • Context類本身被聲明為抽像類,其實現由android OS提供。
  • 上下文就像遠程電視和電視頻道中的資源,服務等。

你可以用它做什麼?

  • 加載資源。
  • 啟動一項新活動。
  • 創建視圖。
  • 獲得系統服務。

上下文的方式:

  • getApplicationContext()
  • getContext()
  • getBaseContext()

補充@djechlin answer (順便說一下好的答案!),當你想在某個特定的迭代或特定的遞歸調用中停止時,這個函數調用也可以用作偽代碼來在IDE中保存斷點,例如:

可以使用isUserAGoat()代替虛擬變量聲明,該聲明將在IDE中顯示為警告,並且在Eclipse特定情況下,將阻塞斷點標記,從而難以啟用/禁用它。 如果該方法用作約定,則稍後可以通過某些腳本過濾所有調用(在提交階段可能?)。

谷歌人是沉重的Eclipse用戶(他們提供了幾個項目作為Eclipse插件:Android SDK,GAE等),所以@djechlin答案和這個補充答案很有意義(至少對我而言)。







android android-context