2017-11-04 2 views
0

Ich habe ein Problem mit meiner App, dass wenn ich schnell zwischen Aktivitäten wechseln kann ich die App abstürzen kann. Ich bin mir nicht sicher, was den Absturz verursacht hat. Hier ist der Code zum Wechseln der Aktivitäten. Dieser Code wird in jede Aktivität kopiert (Map, List und Rally).Rapid activity switching stürzt ab app

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.map: 
      Intent intentMap = new Intent(this, Map.class); 
      startActivity(intentMap); 
      finish(); 
      return (true); 
     case R.id.list: 
      Intent intentList = new Intent(this, List.class); 
      startActivity(intentList); 
      finish(); 
      return (true); 
     case R.id.rally: 
      Intent intentRally = new Intent(this, Rally.class); 
      startActivity(intentRally); 
      finish(); 
      return (true); 
    } 
    return (super.onOptionsItemSelected(item)); 
} 

Der Absturz ist sofort, wenn es auftritt, und ich habe versucht, den Debugger auf alle Ausnahmen zu brechen, aber es verlässt ohne zu werfen. Ich benutze Android Studio und ich teste auf einem S6 Edge, das in Nougat läuft.

Wie kann ich nach dem Grund für diese Abstürze suchen?

Edit:

Also habe ich schließlich eine Ausnahme bekommen zu brechen. Es stellt sich heraus, dass ich einen OutOfMemoryError habe. Ich habe mit dem Android Monitor herumgespielt. Offensichtlich nahm ich an, dass ich einen Speicherleck haben könnte, aber wenn ich den Java-Heap lösche und das Analysetasks-Fenster benutze, zeigt es, dass ich keine Lecks habe. Wenn ich zweimal auf die Schaltfläche "GC initiieren" klicke, wird der zugewiesene Speicher auf einen normalen Wert reduziert. Auch hier bleibt der zugewiesene Speicher auf normalem Niveau, wenn ich nicht schnell zwischen den Klassen umschalte. Ich bin völlig im Verlust, warum irgendetwas passiert. Ich habe bereits versucht, die Antworten zu verwenden, und sie scheinen das Problem nicht zu beeinflussen.

Antwort

1

bitte den aktuellen Kontext der Tätigkeit angeben, wenn neue Absicht zum Beispiel der Erstellung, wenn Sie derzeit auf MainActivity sind dann

Intent intentMap = new Intent(MainActivity.this, Map.class); startActivity(intentMap); 
+0

Sind Sie diesen Spruch irgendwie ist mein Problem verursacht? Da jede Aktivität diesen Code enthält, sollte "CurrentActivity.this" gegenüber "this" gleich sein. – Riko

+0

Sie können auch ... Intent intentMap = new Intent (getApplicationContext(), Map.class); –

+0

Alle diese Codezeilen funktionieren. Sie ändern nicht das Problem, dass ich stürze. – Riko