2017-01-27 57 views
-3

我正在學習Udacity的一門課程中的android開發。當我閱讀第2課時,出現了一種情況,我們必須創建多個Textviews,設置以前創建的ArrayList字符串的文本,並將這些Textviews添加到Linear layout 。這兩個代碼在內存基礎上哪個更好?

公共代碼:

ArrayList<String> words = new ArrayList<String>(); 
    words.add("one"); 
    words.add("two"); 
    words.add("three"); 
    words.add("four"); 
    words.add("five"); 
    words.add("six"); 
    words.add("seven"); 
    words.add("eight"); 
    words.add("nine"); 
    words.add("ten"); 
    LinearLayout rootView =(LinearLayout) findViewById(R.id.rootView); 

現在他們做了什麼:

for(int i=0;i<10;i++){ 
TextView wordView=new TextView(this); 
wordView.setText(words.get(i)); 
rootView.addView(wordView); 
} 

我做了什麼:

ArrayList<TextView> wordView = new ArrayList<TextView>(); 
    for(int i=0;i<10;i++) 
    { 
     wordView.add(new TextView(this)); 
     wordView.get(i).setText(words.get(i)); 
     rootView.addView(wordView.get(i)); 


    } 

現在,我的問題是天氣我的方式來對待這項任務具有比他們的方式更多的內存開銷?

我覺得我的代碼更好,因爲即使在循環之後,我也參考了每個TextView

回答

1

沒有區別。在這兩種情況下,TextView實例不能被垃圾收集,因此記憶足跡是平等的。

因爲我甚至在循環之後引用了每個TextView。

如果你不真的需要這些引用,那麼它只是沒有意義。這不是記憶相關的優勢。

1

你的代碼看起來不錯。但是我沒有看到有10個相同的TextView。我會考慮使用listView或recyclerView,如果您使用它作爲列表並考慮優化您的代碼。

但仍然你的代碼是好的。

+0

'我會考慮使用一個ListView或recyclerView'但每一行是一個TextView的,所以......那會是什麼優化?而且,除了單行之外,您還將擁有一個ViewGroup。 –

+0

ListViews針對顯示項目列表進行了優化。所以內存中的行被重用。 –

1

不要緊性能明智..就像你說:

我覺得我的代碼是更好,因爲我甚至在循環後具有參考每個TextView的。

如果你需要的,做到這一點..