Activity lädt nicht vollständig

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Activity lädt nicht vollständig

    Hallo, ich bin noch ein ziemlicher Anfänger in der Android-Entwicklung und habe da ein kleines Problem. Ich denke ich weiß auch wo das Problem liegt, aber nicht wie ich dieses löse.

    Ich habe zunächst nur 2 Activities: Eine Splash-Activity und eine Login-Activity.
    Beim Starten der App wird die Splash-Activity angezeigt, diese besteht einfach nur aus eine TextView und eine ProgressBar.

    Diese Activity soll solange angezeigt werden, bis überprüft wurde, ob der User bereits eingeloggt ist. Ist der User noch nicht eingeloggt, soll die Login-Activity angezeigt werden.

    Folgendes Problem: Es ist egal an welcher Stelle (onCreate, onStart, onResume) ich den Code zur Überprüfung schreibe (oder überhaupt irgendwelchen Code), die komplette Activity mit der TextView und der ProgressBar wird erst nach Abarbeitung des Codes geladen. Sprich: Es wird nur das grundlegende Style-Theme angezeigt, aber nicht die Elemente aus dem Layout. Erst nach dem Abarbeiten des Codes wird das Layout geladen. Ich denke das Problem ist, dass das Layout erst nach onResume(); geladen wird und jeglicher Code vorher abgearbeitet wird.

    Aber an welcher Stelle soll ich nun genau meinen Code platzieren? Die ProgressBar soll dem User demonstrieren, dass derzeit etwas geladen wird (Die Anmeldung) und dies soll im Hintergrund geschehen.

    Ich habe es bereits mit einem separatem Thread probiert, da gab es dann aber mehr Probleme und unschönes programmieren statt eine zufriedene Lösung.

    Ich bedanke mich für jegliche Hilfe
  • hi es wäre hilfreich wen du und etwas von deinen Code zeigen würdest.
    Das layout wird meistens erst aufgebaut wenn die app läuft .also nach oncrate und onstart.

    Mit welchen thraed hast du es versucht? Würde asyctask empfehlen.

    Die Anzeige des layout wird meist erst aktualisiert und angezeigt wenn die APP richtig läuft also die Kontrolle an Android zurückgeht ,und du in einen listner wartest.
    Dazu könntest du einen Buttonklick simulieren.
    Und dort den Code ausführen. Du könntest dir einen unsichtbaren Button erstellen und ihn auslösen.

    private Button btn;
    btn = (Button)findViewById(R.id.button);
    btn.performClick();

    Dann bist du im in clicklistner und kannst deinen Code starten. Wenn du nicht mit threads arbeiten möchtest.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Es existiert eigentlich noch kein Code. Hier mal meine MainActivity, die zu Begin geladen wird:

    Java-Quellcode

    1. public class MainActivity extends AppCompatActivity{
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. System.out.println("onCreate");
    7. }
    8. @Override
    9. protected void onStart() {
    10. super.onStart();
    11. System.out.println("onStart");
    12. }
    13. @Override
    14. protected void onRestart() {
    15. super.onRestart();
    16. System.out.println("onRestart");
    17. }
    18. @Override
    19. protected void onResume() {
    20. super.onResume();
    21. System.out.println("onResume");
    22. }
    23. @Override
    24. protected void onPause() {
    25. super.onPause();
    26. System.out.println("onPause");
    27. }
    28. @Override
    29. protected void onStop() {
    30. super.onStop();
    31. System.out.println("onStop");
    32. }
    33. @Override
    34. protected void onDestroy() {
    35. super.onDestroy();
    36. System.out.println("onDestroy");
    37. }
    38. }
    Alles anzeigen

    Folgendes Problem: Das in der Manifest.xml festgelegte Theme der Activity wird geladen. Nun soll die in der entsprechenden layout.xml definierte TextView mit einem fest definiertem Text und eine ProgressBar angezeigt werden, um den User zu zeigen: Es wird gerade etwas geladen. Mit diesem Code wird auch das layout geladen. Füge ich jedoch jeglichen Code an den Stellen onCreate(), onStart() oder onResume() ein, wird dieser Code zunächst abgearbeitet, bevor das Layout geladen wird. Es soll aber "parallel" erfolgen. Es soll das layout angezeigt werden und "gleichzeitig" soll im Hintergrund etwas geladen werden.

    Das Problem ist, so weit ich es verstanden habe, dass ich mich in dem Thread des UI bewege und dort alles sequenziell abgearbeitet wird. Nun ergeben sich für mich 2 logische Lösungen: Der auszuführende Code soll ausgeführt werden sobald das UI komplett geladen ist (da an dieser Stelle keine weitere Userinteraktion geschieht) oder aber ich lasse den kompletten Code in einem separaten Thread ausführen, wobei ich dabei dann vermutlich auf andere Probleme stoßen werde (z.B. dem UI mitteilen, dass nun eine neue Activity gestartet werden soll).

    Ich hoffe mein Problem ist damit etwas deutlicher geworden.
  • also wenn du eine Progresbar und irgent etwas im Hindergrund laden möchtest kommst du um Threads nicht herum.
    Das Layout wird geladen es wird nur erst angezeigt wenn die App läuft.
    Schreibe estmal etwas sinnvolles und nicht nur diese test App um den Lifecycle zu testen.
    Eine Progresbar hat normalerweise immer einen teil der in einen Thread im hindergund läuft und von zeit zu zeit die anzeige der Progress in UI Thread acktualisiert. Dazu ist ein Asynctask gut geeignet habe ich schon geschrieben.
    Wie du eine Usereingabe simulierst habe ich dir auch gezeigt.
    Hier ein Beispiel für Progressbar mit asynctask
    concretepage.com/android/andro…example-with-progress-bar


    oder aber ich lasse den kompletten Code in einem separaten Thread ausführen, wobei ich dabei dann vermutlich auf andere Probleme stoßen werde
    Was meist du damit welche Probleme? Denke du hast das Thema Threads noch nicht verstanden.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()