Android-Leistung: Hinzufügen einer programmgesteuerten Ansicht zur Einstellungsansicht zu GONE / VISIBLE

Ich arbeite in einem Projekt, das ein einfaches Tutorial aufblasen muss, wenn der Benutzer die App zum ersten Mal öffnet. Ich versuche es zu tun "den richtigen Weg", und ich frage mich nach Performance-Problem.

Derzeit habe ich in meinem Layout eine Ansicht auf android:visibility="GONE" , die ich je nach VISIBLE auf SICHTBARE wechsle. Dies ermöglicht mir, dass der Benutzer lernen kann, wie die App beim ersten Start startet.

Was ich mich wundere, ist, was es impliziert, wenn die Ansicht in meinem Fragment dargestellt wird. Meine Vermutung ist, dass die Aussicht nutzlos aufgeblasen wird, auch wenn ihre Sichtbarkeit auf GONE .

Jetzt denke ich an eine Alternative: Was wäre, wenn ich nur meine Ansicht auf den ersten Starts, aber programmgesteuert, in meinem Fragment's onCreateView . Das sollte die Ansicht erlauben, nicht auf spätere Starts aufgeblasen zu werden, aber würde nicht die Aufblasung der Ansicht programmgesteuert impliziert schlechte Leistung bei den ersten Starts?

  • Füllen eines Kreises allmählich von unten nach oben android
  • Android - Wie erstelle ich eine Ansicht mit abgerundeten Ecken und einem gefliesten Hintergrund?
  • NullPointerException bei TextView.checkForRelayout () während setText ()
  • Anpassen der vertikalen Scrollbar von ScrollView
  • Kann nicht mit Butterknife 8.1.0 injizieren
  • Android Views: Kann die Sichtbarkeit überprüfen, bevor sie die Sichtbarkeit verbessern.
  • ListView mit dreieckig geformten Gegenständen
  • RelativeLayout - CenterInParent und MarginTop
  • 3 Solutions collect form web for “Android-Leistung: Hinzufügen einer programmgesteuerten Ansicht zur Einstellungsansicht zu GONE / VISIBLE”

    Also, um meine eigene Frage zu beantworten, habe ich das DDMS-Tool TraceView , um die Anrufe von meinem Fragment onAttach bis zu seinem onResume zu überwachen. Es lässt mich sehen, welche Umsetzung um so weniger effizient ist.

    Um den Test zu machen, hatte ich eine einfache RelativeLayout mit einem FrameLayout drin (gezeigt die ganze Zeit). Ich habe ein benutzerdefiniertes Layout verwendet, um jedes Mal, entweder programmgesteuert oder mit einer Sichtbarkeit von GONE auf meine Layout-Datei hinzuzufügen. Das benutzerdefinierte Layout besteht aus einem RelativeLayout mit 4 childs (ein ImageView, ein TextView, eine Ansicht und eine Schaltfläche).

    Meine onCreateView war die folgende, so dass die App das richtige Layout auf der Grundlage von zwei static final boolean Konstanten aufblasen, 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 aufgeblasen ist

    SHOULD_FYI_VIEW_BE_SHOWN=true

    Die maximale "Echtzeit-Schätzung", die durch die TraceView gegeben wird, sind von 75ms, wenn es nur eine Ansicht gibt, von GONE zu VISIBLE zu VISIBLE , aber von 110ms, wenn wir die inner_view Ansicht instanziieren inner_view .

    Wenn das optionale Layout nicht aufgeblasen ist SHOULD_FYI_VIEW_BE_SHOWN=false

    In diesem Fall beträgt die von TraceView gegebene maximale Echtzeitschätzung für die Inflation der GONE Sicht von GONE , im Vergleich zu 39ms, wenn die aufgebaute Ansicht nicht die GONE Sicht 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 programmgesteuert aufzublasen, wenn Sie nur noch ein paar Mal zeigen müssen .

    Sie finden das Testprojekt auf einem Gist

    Ich glaube, Sie sind neu erfinden ein Rad. Für dieses Szenario ist bereits vorhandenes Tool in Android-XML-Layouts. Es heißt ViewStub. Sie können hier mehr lesen: Loading ondemand

    Ich denke, ich bin zufällig stolperte über die Antwort auf Ihre Leistung Frage.

    Aus der Animation Docs :

    Für die Ansicht, die verblasst wird, setzen Sie ihre Sichtbarkeit zu GONE. Dies verhindert, dass die Ansicht den Layout-Raum aufnimmt und von Layout- Berechnungen weglässt und die Verarbeitung beschleunigt.

    Dies würde bedeuten, Leistung ist nicht kompromittiert, solange Sie nicht setzen android:visibility auf etwas anderes als GONE .

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.