android Activity Application Context 的區別


用了這么久的Context,對於Context究竟是個什么玩意一直不是很明白。看了網上十幾篇文章的介紹 加上自己的理解總結一下。(自己想法,不對勿噴,不想照搬網上一些文字說法來糊弄自己,自己理解的就這么多,有誰好的補充記得提一下 我好加進去,謝謝了啊)

1,我們需要明白的是Context是Activity Application Service 的抽象基類,官方翻譯其實Activity里面有一個引用context,Application里面有一個引用context。兩個不同的引用的context的生命周期是不一樣的。為什么要封裝這么一個東西 其實我不是很明白,忘哪位大神給個例子說明一下。

2,不是很牛逼的大神當然只要知道怎么用就好了啊,

  (1)最常用的就是就是startActivity。一般來說傳的是這個Activity的context引用。用getApplication的引用好像也是可以的。但是有人說需要創建一個新的task。一般情況不推薦。我在android6.0的小米機器上使用是直接可以的。 反正跳轉Activity一般使用 activity的引用。

  (2)一般我們會對已有的API進行封裝。一般會使用靜態的方法並且使用單例。很多時候需要傳Context,一般這個時候當static是一個強引用,使用Activity的時候當Activity銷毀的時候,context的引用無法被回收 導致類存泄露。(內存檢測工具 LeakCanary 非常的方便 可以非常清楚的定位那個地方內存泄露),這個時候我們應該用全局的Application的引用context

  (3)創建activity或者圖片或者組件的創建,應該使用Activity的context,不然因為Application是全局的導致這些資源無法及時得到釋放,導致內存泄露。

COPY 別人的話:

1,凡是跟UI相關的,都應該使用Activity做為Context來處理其他的一些操作,Service,Activity,Application等實例都可以

2,(官方翻譯)提供應用環境全局信息的接口,並且這個接口是由抽象類實現的,它的執行被android系統所提供,允許我們獲取以應用為特征的資源和類型,同時啟動應用級的操作,如啟動Activity,broadcasting和接收intent

3,添加一個很有用的圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM