ListView優化中ViewHolder要不要定義為static靜態內部類?


 給學生講課的時候,發現存在這個問題,下來百度了下,發現很糾結,涉及到了內部類對外部類的引用,靜態類的生命周期等java知識,現總結如下:

 

static class ViewHolder {

   //定義listView item中相應的控件

}

 

這里的ViewHolder類需不需要定義成static,根據實際情況而定,如果item不是很多的話,可以使用,這樣在初始化的時候,只加載一次,可以稍微得到一些優化;

不過,如果item過多的話,建議不要使用。因為static是Java中的一個關鍵字,當用它來修飾成員變量時,那么該變量就屬於該類,而不是該類的實例。所以用static修飾的變量,它的生命周期是很長的,如果用它來引用一些資源耗費過多的實例(比如Context的情況最多),這時就要盡量避免使用了。

 

靜態內部類不會存在外部類引用
非靜態的, 每個ViewHolder都會保存一個外部類的引用.

一般的類是不允許static修飾的.
靜態類僅表示這個類不依賴它的外部類而存在.  new一次肯定會分配一次內存,也就是說每一次如下new操作都會分配一次內存

holder = new ViewHolder();

 

為什么ViewHolder要使用static關鍵字去聲明?

當一個內部嵌套類不依賴於外部類的時候,我們就會把它聲明為靜態的,在我們的案例中,ViewHolder從來沒有使用到適配器類(外部類)的任何成員變量,因此我們可以把它聲明為靜態的,以保持它作為一個簡單的靜態嵌套類來維持外部類是一個嵌套的可讀性,因為它的使用僅限於它的外部類,但是如果你要訪問外部類的成員變量的話你的嵌套類必須聲明為非靜態的。

 

非靜態的內部類對象隱式地在外部類中保存了一個引用,指向創建它的外部類對象。

靜態類中可以定義靜態方法和靜態屬性,也可以定義非靜態方法和屬性;但非靜態類中不可以定義靜態屬性和方法。

 

參考:

static class 靜態類(Java)_枝葉飛揚_新浪博客
http://blog.sina.com.cn/s/blog_605f5b4f0100zbps.html

非靜態類中為什不能定義靜態方法 - zcl1199的博客 - 博客頻道 - CSDN.NET
http://blog.csdn.net/zcl1199/article/details/51723417

 


免責聲明!

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



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