public CompassView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
例如我这一个,默认就是调用这个构造方法。 我自己写的一个view的构造方法。context表示activity的上下文,attrs表示你在xml中配置的属性,例如宽,高等
context表示activity的上下文,,,这个上下文是什么意思?用些作文的来理解不通啊...求大牛形象理解一下
申请关闭
PHP中文网2017-04-17 14:41:20
Context的作用是用來存取全域資訊的,例如每個UI元件的建構子都是要傳入一個Context的。
拿TextView來打比方:
TextView textView = new TextView(this);
textview.setText(R.string.balabala);
這裡實例化的時候傳入了一個this,這個值就是一個Context。
這裡設定了一個在strings.xml檔案中預先定義的字串,setText(int resid)函數的原始碼中是這樣的:
public final void setText(int resid) {
setText(getContext().getResources().getText(resid));
}
注意到這裡面使用了getContext()函數去取得全域資訊資源,並透過id篩選出自己想要的資源。這裡的這個getContext()得到的上下文,就是我們在實例化TextView時傳進去的Context。
所以,Context是用來協助物件存取全域資訊的。
使用的時候要尤其註意,Context傳出去,使用完要及時釋放掉,因為Context是有一個引用抓取著Activity的,如果Activity生命週期結束後還沒有及時釋放掉Context,很容易造成記憶體外洩。