Android stürtzt im Hintergrund ab

  • Antworten:10
Tobias
  • Forum-Beiträge: 12

28.05.2015, 15:17:04 via Website

Hallo liebe Community,
mein Problem ist das meine Apps im Hintergrund bzw. vom wechseln in den Hintergrund immer abstürzen.
Dies passiert z.b. wenn man den Home-Button des Handys oder den Menü-Button drückt. Wo bzw. wie sag ich der App dass diese weiterlaufen soll ?

Gruß Tobi

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

28.05.2015, 15:57:30 via Website

Was? Du hast deine App an und wenn du dann auf den Homebutton drückst stürzt sie ab?
Was soll sie denn im Hintergrund noch machen?

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

28.05.2015, 16:13:18 via App

Hallo Tobias,

herzlich willkommen hier im Forum (*)

hast du in der onPause oder in der onStop irgendwas rein geschrieben? Der Code würde Uns bzw. dir weiter helfen.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Tobias
  • Forum-Beiträge: 12

28.05.2015, 21:59:57 via Website

Danke für die Antworten.

im Hintergrund soll die App einfach pausieren und dann später weiterlaufen.

OnPause hab ich garnicht erst, worans denk ich mal liegt, ich hab nur onCreate. Wie funktioniert des mit OnPause, des is mir neu ?

Gruß Tobias

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

29.05.2015, 00:26:38 via App

Hallo Tobias,

wir reden hier vom abstürzen oder vom normalen beenden?

Denn wenn du die onPause nicht überschrieben hast wird diese Instanz nur normal durchlaufen und das System beendet deine APP selbständig im Hintergrund um Speicher für andere Apps zu schaffen.

Um die APP am "Leben" zu halten müsstest du einen Sticky Service Starten. Es kommt drauf an was deine APP können soll, pauschal zu sagen Sie so am Leben bleiben ist aus Sicht des Users eher kontraproduktiv. Es wird unnötig am Akku gesaugt und Speicher belegt.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Tobias
  • Forum-Beiträge: 12

29.05.2015, 12:54:03 via Website

Hallo Ludy danke für deine Antworten,

beim wechseln in den Hintergrund kommt ein Dialogfenster mit "Appname angehalten !".
Dass die App wenn sie geöffnet bleibt Akku und Leistung zieht ist mir klar aber ich möchte, dass der Nutzer die App gewollt beendet und nicht mit dem Wechsel in den Hintergrund. Es ist also beabsichtigt, dass die App im Hintergrund weiter Aktiv ist.
Das mit dem Sticky Servic hilft mir schon weiter.

Ich erstell also eine onPause Methode und ruf in dieser den Sticky service auf ?!

Brauch ich dann in all meinen Activities die onPause Methode ?

Gruß Tobias

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

29.05.2015, 13:30:34 via App

Hallo Tobias,

bevor du mit einen Service anfänst müsstest du schauen warum sie abstürzt. Solange das nicht geklärt ist, ist das andere unsauberes programmieren.
In deinen Fall müsste der Service in der onPause über einen intent gestartet werden.
Aber wie gesagt die APP darf nicht beim schließen abstürtzen, da ist was faul im Code.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Tobias
  • Forum-Beiträge: 12

30.05.2015, 16:27:13 via Website

Ich hab jetzt mal das Logcat durchsucht und das Problem liegt im Thread, den ich benutze.

 java.lang.IllegalThreadStateException: Thread already started

Hier ist der Verweis auf den Quelltext

  public void surfaceCreated(SurfaceHolder holder) {

            game_Loop.setRunning(true);
            game_Loop.start();

        }

Hier is nochmal die ganze Klasse etwas gekürtzt.

.......
  @Override
        public void surfaceDestroyed(SurfaceHolder holder) {

            boolean retry = true;

            game_Loop.setRunning(false);

            while (retry) {

                try {

                    game_Loop.join();

                    retry = false;

                } catch (InterruptedException e) {

                }

            }

        }

        @SuppressWarnings("deprecation")
        public void surfaceCreated(SurfaceHolder holder) {

            game_Loop.setRunning(true);
            game_Loop.start();

        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format,

                                   int width, int height) {

        }

    });

}

@Override
public void onDraw(Canvas canvas) {
  .......
  }

Hier ist noch die run Methode des Threads:

public void run() {

    long ticksPS = 1000 / FPS;

    long startTime;

    long sleepTime;

    while (running) {


        Canvas c = null;

        startTime = System.currentTimeMillis();

        try {

            c = view.getHolder().lockCanvas();

            synchronized (view.getHolder()) {

                view.onDraw(c);
            }

        } finally {

            if (c != null) {

                view.getHolder().unlockCanvasAndPost(c);

            }

        }

        sleepTime = ticksPS-(System.currentTimeMillis() - startTime);

        try {

            if (sleepTime > 0)

                sleep(sleepTime);

            else

                sleep(4);

        } catch (Exception e) {}


    }

Bei der App handelt es sich um ein Spiel und ich benötige den Thread um den Canvas neu zu zeichnen.
Was muss ich ergänzen damits läuft ?

Vielen Dank für eure Hilfe !!
Gruß Tobias

— geändert am 30.05.2015, 16:53:38

Antworten
Tobias
  • Forum-Beiträge: 12

01.06.2015, 13:03:10 via Website

Niemand ne Idee ?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

01.06.2015, 13:48:57 via Website

Der Fehler sagt doch schon alles.
Der Thread ist bei Deinem Aufruf von start() schon einmal gestartet worden.
Schau dir doch den Lifecycle Deiner Activity/Views an und überlege mal warum er zweimal an die Code-Stelle mit start() kommt und überlege Dir, wie du das sinnvoll behandeln kannst.

Antworten