getApplicationContext()

getApplicationContext()

在android中常常會遇到與context有關的內容

淺論一下context : 在語句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求傳遞的 參數就是一個context,在這裏我們傳入的是this,那麼這個this究竟指的是什麼東東呢? 這裏的this指的是Activity.this,是這個語句所在的Activity的this,是這個Activity 的上下文。網上有很多朋友在這裏傳入this.getApplicationContext(),這是不對的。 AlertDialog對象是依賴於一個View的,而View是和一個Activity對應的。 於是,這裏涉及到一個生命週期的問題,this.getApplicationContext()取的是這個應 用程序的Context,Activity.this取的是這個Activity的Context,這兩者的生命週期是不同 的,前者的生命週期是整個應用,後者的生命週期只是它所在的Activity。而AlertDialog應 該是屬於一個Activity的,在Activity銷燬的時候它也就銷燬了,不會再存在;但是,如果傳 入this.getApplicationContext(),就表示它的生命週期是整個應用程序,這顯然超過了它 的生命週期了。 所以,在這裏我們只能使用Activity的this。

new AlertDialog.Builder(getApplicationContext())時發生錯誤:

E/AndroidRuntime(5844): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

於是查了查:

getApplicationContext() 生命週期是整個應用,應用摧毀它才摧毀 Activity.this的context屬於activity ,activity 摧毀他就摧毀

activity.this要返回一個activity,而getApplicationContext()就不一定返回一個activity


getApplicationContext() 返回應用的上下文,生命週期是整個應用,應用摧毀它才摧毀
Activity.this的context 返回當前activity的上下文,屬於activity ,activity 摧毀他就摧毀

getBaseContext()  返回由構造函數指定或setBaseContext()設置的上下文


/***************************************************************************************************************************************************/

getFilesDir():

Activity提供了getCacheDir()和getFilesDir()方法:

getCacheDir()方法用於獲取/data/data//cache目錄

getFilesDir()方法用於獲取/data/data//files目錄

將文件寫入SD卡內:

獲取SDCard的狀態:

Environment.getExtemalStorageState()

EnvironmentMEDIA_MOUNTED手機裝有SDCard,並且可以進行讀寫

獲取SDCard的目錄:Environment.getExtemalStorageDirectory()

File saveFile=new File("/sdcard/zhzhg.txt");

或:File sdCardDir=new File("/sdcard");//獲取SD卡目錄

File saveFile-new File(sdCardDir,"zhzhg.txt");

FileOutputStream outStream = new FileOutputStream(saveFile);

outStream.write("文件的讀寫".getBytes());

outStream.close();

 

更多

/***************************************************************************************************************************************/

getAbsolutePath():返回抽象路徑名的絕對路徑名字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章