android 中窗體溢出(android.view.WindowLeaked)

1.Activity 的生命週期與 Dialog 的不同 AlertDialog.Builder builder=new AlertDialog.Builder(context);android

 2.這個context 是Activity的上下文 3.Dialog 要在Activity 銷燬前 dismiss()掉,否則就窗體溢出ui

 在android中經常會遇到與context有關的內容,特寫下這篇blog,淺論一下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。 差異就是表明着不一樣的生命週期吧。this

相關文章
相關標籤/搜索