context,很多開發人員,一定很迷惑。下面簡單介紹一下
但是在程式的角度context是什麼呢?在程式的角度,我們可以有比較權威的答案,context是個抽象類,我們可以直接通過看其類結構來說明答案:
先扯這麼多,有能力了會從別的角度去審視context,加油~
下面開始介紹在使用context時,需要注意的問題。
大家在編寫一些類時,例如工具類,可能會編寫成單例的方式,這些工具類大多需要去訪問資源,也就說需要context的參與。
在這樣的情況下,就需要注意context的引用問題。
例如以下的寫法:
package com.mooc.shader.roundimageview;
import android.content.context;
public class custommanager
public static synchronized custommanager getinstance(context context)
return sinstance; }
//some methods
private void someothermethodneedcontext()
}
對於上述的單例,大家應該都不陌生(請別計較getinstance的效率問題),內部保持了乙個context的引用;
這麼寫是沒有問題的,問題在於,這個context哪來的我們不能確定,很大的可能性,你在某個activity裡面為了方便,直接傳了個this;這樣問題就來了,我們的這個類中的sinstance是乙個static且強引用的,在其內部引用了乙個activity作為context,也就是說,我們的這個activity只要我們的專案活著,就沒有辦法進行記憶體**。而我們的activity的生命週期肯定沒這麼長,所以造成了記憶體洩漏。
那麼,我們如何才能避免這樣的問題呢?
有人會說,我們可以軟引用,嗯,軟引用,假如被**了,你不怕nullpointexception麼。
把上述**做下修改:
public static synchronized custommanager getinstance(context context)
return sinstance;
}
下面就開始介紹各種context的應用場景。
數字2:在這些類中去layout inflate是合法的,但是會使用系統預設的主題樣式,如果你自定義了某些樣式可能不會被使用。
數字3:在receiver為null時允許,在4.2或以上的版本中,用於獲取黏性廣播的當前值。(可以無視)
注:contentprovider、broadcastreceiver之所以在上述**中,是因為在其內部方法中都有乙個context用於使用。
Android開發之全域性獲取Context的技巧
第一行 android 高階篇 這本書對於入門來說確實很棒,很簡單明瞭的介紹了android開發中涉及到的方方面面,對我的幫助很大,同時記錄一些該書中一些對我以後開發有用的東西,以方便使用。1 public23 private static context context 45 override 6...
Android開發 Android搜尋框架(二)
1.建立搜尋建議提供者 android已經為我們建立了乙個預設的,我們只需要繼承 searchrecentsuggestionprovider 就稍做修改就可以了。見 1 import android.content.searchrecentsuggestionsprovider 2 3 4 搜尋提...
Android開發 Android顏色透明度換算表
目錄 一 背景 二 顏色值標準格式 三 透明度 四 透明度計算 作為一名android開發人員,在每次開發的時候,ui會在設計圖中標註顏色值,或者會直接給出顏色值,如 ff2309,但是有時候為了達到某種效果,需要在顏色值前面新增透明度,如 40 的透明度。還有一種情況就是交給ui驗收的時候,說介面...