App Absturz -The surface has been released

  • Antworten:1
GProgrammer
  • Forum-Beiträge: 16

29.04.2014, 19:34:59 via Website

hallo, bin dabei eine app zu programmieren, welche nach gewisser zeit ein video öffnen soll. wenn ich die app starte und auf den homescreen wechsel und warte bis der timer abläuft und das video startet, bekomme ich die fehlermeldung "The surface has been released" und meine app stürtzt ab.

es ist ja so, dass man eigentlich die app nicht minimiert, sondern auf der ansicht bleibt. dennoch wäre es schön, wenn die app dadurch trotzdem nicht abstürzen würde.

eine möglichkeit dies zu lösen wäre eine abfrage zu machen, ob man gerade auf dem homescreen ist oder eine andere app gestartet (also eine andere ansicht) hat und wenn dies so ist soll das video nicht abgespielt werden.

meine code-teile sehen so aus:

die xml:

<SurfaceView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/surfaceView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:visibility="invisible" />

die mainactivity.java:

new Thread(new Runnable() { public void run() {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                surfaceView.setVisibility(View.VISIBLE);
            }
        });
        mpV = MediaPlayer.create(getApplicationContext(), R.raw.explosion);
        mpV.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer playSuccess) {
                playSuccess.release();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        surfaceView.setVisibility(View.INVISIBLE);
                    }
                });
            }
        });
        mpV.setDisplay(surfaceView.getHolder());
        mpV.start();
    }
}).start();

Antworten
impjor
  • Forum-Beiträge: 1.793

29.04.2014, 20:30:24 via App

Warum machst du das in einem Thread oO?
Es doch so, dass die SurfaceView nicht existiert, wenn du die Activity in den Hintergrund bewegst.
Möchtest du, dass das Video trotzdem startet, musst du entwerder
a) Ein System Alert Dialog benutzen b) deine Activity in den Vordergrund bringen (startActivity)
Doch beachte, dass deine App jederzeit beendet werden kann, befindet sich die Activity nicht im Vordergrund. Benutzen solltest du dann einen Service. Ach ja, wenn du das ganze einfach canceln willst, wenn die App minimiert wurde, kannst du ja einen boolean in onPause()/onResume() setzen.

— geändert am 29.04.2014, 20:31:27

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten