Also, um meine eigene Frage zu beantworten, habe ich das DDMS-Tool TraceView
verwendet, um die Anrufe von meinem Fragment onAttach
bis zu seiner onResume
zu überwachen. Es ließ mich sehen, welche Implementierung weniger effizient ist.
Um den Test zu machen, hatte ich eine einfache RelativeLayout
mit einer FrameLayout
drin (gezeigt die ganze Zeit). Ich habe jedes Mal ein benutzerdefiniertes Layout verwendet, entweder programmgesteuert oder mit einer Sichtbarkeit von GONE in meiner Layout-Datei. Das benutzerdefinierte Layout bestand aus einem RelativeLayout mit 4 Childs (einem ImageView, einem TextView, einem View und einem Button).
Meine onCreateView
war die folgende, so dass die App das richtige Layout basierend auf zwei static final boolean
Konstanten aufblasen kann, um die Layouts zu ändern.
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout root;
if(INFLATE_PROGRAMMATICALY) {
root = (LinearLayout) inflater.inflate(R.layout.fragment_test_prgmcly, container, false);
if(SHOULD_FYI_VIEW_BE_SHOWN) {
View tutoView = inflater.inflate(R.layout.inner_view, root, false);
root.addView(tutoView);
}
} else {
root = (LinearLayout) inflater.inflate(R.layout.fragment_test_gone,container,false);
if(SHOULD_FYI_VIEW_BE_SHOWN) {
View tutoView = root.findViewById(R.id.RL_inner_view);
tutoView.setVisibility(View.VISIBLE);
}
}
return root;
}
Dies führt zu folgenden Ergebnissen:
Wenn das optionale Layout in aufgeblasenen
SHOULD_FYI_VIEW_BE_SHOWN=true
Die maximale "Echtzeit Schätzung" der Traceview gegeben ist 75ms wenn nur eine Ansicht von GONE
auf 0 zu ändern ist, aber von 110 ms wenn wir die inner_view
instanziieren müssen.
Wenn das optionale Layout SHOULD_FYI_VIEW_BE_SHOWN=false
In diesem Fall nicht aufgeblasen wird, die maximale Echtzeit-Schätzung von Traceview gegeben ist von 102ms für die Inflation der GONE
Ansicht, im Vergleich zu 39MS wenn die Ansicht aufgebläht nicht die GONE
Ansicht hat.
Also, für die Leistungssteigerung, wenn die Ansichten nicht aufgeblasen werden müssen, würde ich sagen, dass die beste Lösung ist, um Ihre Ansicht programmatisch aufzublasen, wenn Sie es nur ein paar Mal zeigen müssen.
Sie können das Testprojekt auf einem finden Gist
Nicht sicher über Leistungsvergleich. Aber wenn es wirklich so etwas wie Tutorial auf den ersten Lauf, dann geben Sie [Showcase View] (https://github.com/amlcurran/ShowcaseView) einen Versuch :) –
@PurpleDroid Nun, ich zeige es tatsächlich als ein 'CardView' jetzt sofort. Es ist nur ein FYI zum ersten Mal Benutzer, nicht wirklich ein Tutorial! :-) – MagicMicky
@MagicMicky: Sorry, aber ich muss fragen "Was hast du probiert?". Es ist sehr einfach, DDMS zu verwenden, um den Fortschritt einer App mithilfe von logcat zu verfolgen. Warum versuchst du nicht einfach die verschiedenen Ansätze selbst und siehst, was passiert? – Squonk