Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Context上下文理解

Android Context上下文理解

編輯:關於Android編程

Android中有個我們熟悉又陌生的對象Context(上下文),當我們啟動Activity的時候需要上下文,當我們使用dialog的時候我們需要上下文,但是上下文對象到底是個什麼東西呢?

在Android api當中是這樣描述context對象的。

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

“是一個用於實現關於應用環境的整體信息的一個接口。這是一個由安卓系統提供的抽象類並且系統有對他進行實現。它允許訪問到應用特殊的資源和類,同時它也可以實現到應用級別的操作,例如:Activity的啟動,廣播的實現和接受intent等。”

一、Context的主要實現和繼續理解

知道了context的大概描述,我們可以再繼續理解Context這個神秘的對象了,首先,作為基類,肯定有其它類去實現它,主要實現了context類的類是Activity,Service,Application。他們三個類雖然都是Context的子類,但是具體的繼承關系卻有些不大一樣:

Activity的繼承關系:

\

Service和Application的繼承關系:

\ 可以看出我們的Context其實就是我們熟知的Activity,Service,Application。 在這3個類中,Activity的context對象和Application的context對象最容易弄混淆。

 

二、Context中的主要方法

知道了Context的大概描述和他的一些繼承關系,我們對Context這個類有了一個大致的了解。現在可以看看在context中的一些方法,來加深對context的一個理解,有很多我們使用過的方法其實都是從Context這個類中實現而來。 \ 我們從Android api中查看Context類,這裡出現了一個非常熟悉的方法:startActivity,可以看到其實Activity中的StartActivity方法是重寫了Context中的方法。 \ \\\ abstract void startActivity(Intentintent) Same asstartActivity(Intent, Bundle)with no options specified. abstract void startActivity(Intentintent,Bundleoptions) Launch a new activity.   同時context還可以訪問到資源文件,獲得資源文件中的信息。 \\\ abstractResources getResources() Return a Resources instance for your application's package. abstractSharedPreferences getSharedPreferences(Stringname, int mode) Retrieve and hold the contents of the preferences file 'name', returning a SharedPreferences through which you can retrieve and modify its values. finalString getString(int resId) Return a localized string from the application's package's default string table. finalString getString(int resId,Object...formatArgs) Return a localized formatted string from the application's package's default string table, substituting the format arguments as defined inFormatterandformat(String, Object...). \\ \ 同時context不但可以開啟一個activity,同時還可以開啟或者關閉一個Service。 abstractComponentName startService(Intentservice) Request that a given application service be started. abstract boolean stopService(Intentservice) Request that a given application service be stopped. \\\ 訪問Android Api 或者查看源碼可以看到,Context中還有很多訪問資源文件和程序之間互相通信的方法。 可以看出context其實就是一個應用之中的手腳,可以通過他來拿取資源文件中的資源,還可以通過他來處理Activity和Service中的一些操作,這個類就是整個程序的樞紐,負責管理整個程序的通暢運行。   我們可以通過分析一個Toast通知的源碼去分析context的去向和使用,來了解context到底做了些神馬操作:  

可以看到makeText方法接受的context被用於
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
這是用於獲取XML中定義的View的方法,可以看到通過外部傳入的Context,在這裡獲得了一個View布局用於顯示Toast。
 

 
這一行中可以看出在context又被用來獲取資源文件,可以看出Toast的顯示和布局都是通過context去調用系統寫好的資源文件來進行實現的。
 

三、Activity context和Application context的區別

Activity的context和Application的context的區別在於生命周期的區別,Activity的context是依附在著Activity的生命周期的,而Application的Context的生命周期是依附在整個應用之上的。   \
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved