2016-05-15 5 views
0

Meine Anwendung verfügt im Moment über zwei Aktivitäten, einen Startbildschirm und eine In-Game-Aktivität. Der Startbildschirm, der nichts als ein Hintergrund und eine Play Taste ist. Durch Drücken der Wiedergabetaste wird die InGameActivity gestartet, die einwandfrei funktioniert. Wenn ich jedoch im Spiel die Taste back drücke, wird zum vorherigen Bildschirm zurückgekehrt (der Hintergrund und die Schaltfläche Play sind sichtbar), aber die App reagiert nicht. Nach einigen Sekunden erscheint eine Fehlermeldung, in der Sie darauf warten müssen, dass die Nachricht antwortet oder beendet wird.Zurück-Taste bewirkt, dass Anwendung nicht mehr reagiert

Im Spiel benutze ich einen Thread, um eine konsistente 30 FPS aufrechtzuerhalten und es steuert die Zeichenaufrufe. Meine beste Wette ist auf den Thread verursacht Probleme oder etwas fehlt in der AndroidManifest.xml, aber ich bin sehr verwirrt. Alles, was ich im Internet gefunden habe, deutet darauf hin, dass die Zurück-Taste selten Probleme verursacht und finish() von onPause() oder onBackPressed() anrufen sollte sich darum kümmern, aber es hat nicht.

LÖSUNG: Das Beenden des Threads beim Aufruf von onBackPressed() löste das Problem.

Die MainActivity:

public class MainActivity extends Activity { 

    ImageButton play; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     setContentView(R.layout.title); 

     play = (ImageButton)findViewById(R.id.title_screen_play_button); 
     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       System.out.println("Play button pressed!"); 
       Intent intent = new Intent(getApplicationContext(), InGameActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

Und das in der Spielaktivität:

public class InGameActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     System.out.println("In game activity created"); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     //The GamePanel controls the entire game. It extends SurfaceView and implements SurfaceHolder.Callback 
     GamePanel gamePanel = new GamePanel(this, metrics.widthPixels, metrics.heightPixels, getResources()); 
     setContentView(gamePanel); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     System.out.println("Pausing game activity"); 

     finish(); 
    } 

} 

Und die Aktivitäten in meinem AndroidManifest.xml:

<activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".InGameActivity"/> 

Schätzen Sie Ihre Hilfe und die Zeit nehmen, zu lesen Dies.

Lassen Sie mich wissen, wenn zusätzlicher Code benötigt wird, um zu helfen.

+0

Das Aufrufen von finish() in onPause ist eine Option, aber Sie können Ihrem Activity-Tag in AndroidManifest.xml auch android: noHistory = "true" hinzufügen. – Rafal

+0

Der Aufruf von 'finish()' aus 'onPause()' ist nicht notwendig, es sei denn, Sie ändern das Standardverhalten von 'onBackPressed()'. Beenden Sie Ihren 30fps-Thread, wenn "InGameActivity" beendet ist? – adelphus

+0

adelphus ja das Problem war mit einem Fehler in der Methode, den Thread zu beenden. Danke für Ihre Antwort. Ich habe auch finish() entfernt, da es unnötig ist und alles jetzt perfekt funktioniert. –

Antwort

0

Das Beenden des Threads beim Aufruf von onBackPressed() löste das Problem.

Verwandte Themen