LinerLayoutで表示する時とListViewを使う時のメモリー比較
①LinerLayoutで表示す場合
activity_number.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.miwok.NumberActivity">
</LinearLayout>
NumberActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_number);
ArrayList<String> words = new ArrayList<String>();
for(int i=0; i < 10000; i++) {
words.add(i, "テスト");
}
}
実行前のメモリー
実行後のメモリー
10000件の文字列を全部LinearLayoutに表示したので13M程度メモリーが増えました
②ListViewとArrayListで表示する場合
activity_number.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/list"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.miwok.NumberActivity"/>
NumberActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_number);
ArrayList<String> words = new ArrayList<String>();
LinearLayout liner = (LinearLayout) findViewById(R.id.rootView);
for(int i=0; i < 10000; i++) {
words.add(i, "テスト");
}
ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, words);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(itemsAdapter);
}
実行前のメモリー
実行後のメモリー
同じデータを表示してもメモリー再利用しているのでほとんどメモリー使わない
見た目は同じだけどメモリー使い方がこんなに違います。
メモリー考えながら開発しましょう!!!!!