Я провел ОЧЕНЬ неформальные / хакерские тесты по этому поводу и обнаружил, что при использовании программного подхода, хотя с ним не так приятно работать, он экономил от трети до половины общего времени, затрачиваемого на это. Тест проводился только на Samsung 7 "Galaxy, а не на AVD.
Как я уже сказал, это был очень неформальный / хакерский тест (как вы увидите по коду), с очень ограниченными обстоятельствами, такие вещи, которые вы собираете быстро, чтобы удовлетворить свое собственное любопытство, а не обычно для общественного потребления.
R.layout.ll и R.layout.tv - простые файлы макетов, содержащие пустые LinearLayouts и TextViews соответственно.
Если вы просто работаете с несколькими представлениями, я бы придерживался XML / inflaters, но для сотен, возможно, вы захотите рассмотреть программный подход, если скорость является проблемой.
package com.inflatervscode;
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class InflaterVSCodeActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
// Generates a few nested LinearLayouts/TextViews, a number of
// times, and works out how many milliseconds this took.
@Override
public void onResume() {
super.onResume();
setContentView(R.layout.main);
int num_repeats = 500; // Change this to however many times you want to
// create a set of nested views.
LinearLayout masterLL = (LinearLayout)findViewById(R.id.test);
TextView results = (TextView)findViewById(R.id.results);
Calendar c = Calendar.getInstance();
long startTime = c.getTimeInMillis();
for (int i=0;i<num_repeats;i++) {
// Replace the section below with LinearLayout fll = new LinearLayout(this); etc
LinearLayout fll = (LinearLayout)getLayoutInflater().inflate(R.layout.ll, null);
LinearLayout sll = (LinearLayout)getLayoutInflater().inflate(R.layout.ll, null);
LinearLayout tll = (LinearLayout)getLayoutInflater().inflate(R.layout.ll, null);
TextView tv = (TextView)getLayoutInflater().inflate(R.layout.tv, null);
tv.setText(i+"");
tll.addView(tv);
sll.addView(tll);
fll.addView(sll);
masterLL.addView(fll);
}
c = Calendar.getInstance();
long endTime = c.getTimeInMillis();
String tt = Long.toString((endTime-startTime));
results.setText("Results for "+num_tests+" tests:\n\nStart:"+Long.toString(startTime)+"\nEnd :"+Long.toString(endTime)+"\n\nDifference (ms):"+tt);
}
}