2016-04-10 5 views
0

Ich habe eine Oberflächenansicht gameView, die in diesem GameViewActivity geladen wird.
Ich speichere ein paar Werte in der onSaveInstanceState-Methode. Und wenn ich diese Aktivität verlasse und wieder zurückkomme, wird OnCreate() erneut aufgerufen, wobei meine Aktivität wieder in den ursprünglichen Zustand zurückgesetzt wird und der onRestoreInstanceState nie aufgerufen wird.Warum wird meine Android onRestoreInstanceState-Methode niemals aufgerufen, obwohl ich den Aktivitätsstatus speichere?

Obendrein, wenn ich das Bundle, das in die OnCreate-Methode übergeben wird überprüfen, ist es immer Null. Irgendeine Idee, ich stehe hier sehr fest?

public class GameViewActivity extends AppCompatActivity { 


private int player; 

private GridView grid1; 
private GridView grid2; 

private GameView gameView; 

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


    try { 
     grid1 = new GridView(Constants.NUMBER_COLUMN_TILES, Constants.NUMBER_ROW_TILES); 
     grid2 = new GridView(Constants.NUMBER_COLUMN_TILES, Constants.NUMBER_ROW_TILES); 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 

    this.player = 1; 
    gameView = new GameView(this, "sea", grid1); 

    setContentView(gameView); 

} 



@Override 
protected void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 

    outState.putSerializable("tiles_player1", grid1.getTiles()); 
    outState.putSerializable("tiles_player2", grid2.getTiles()); 
    outState.putInt("player", player); 

} 


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

    grid1.setTiles((HashMap<Coordinate,GameTile>) savedInstanceState.get("tiles_player1")); 
    grid2.setTiles((HashMap<Coordinate,GameTile>) savedInstanceState.get("tiles_player2")); 

    player = (int)savedInstanceState.get("player"); 
} 

Antwort

0

onSaveInstance/onRestoreInstance sind nur für den Aktivitätszustand zu speichern, wenn das System es tötet (z.B. niedrige Speicher, wenn app im Hintergrund ist). Wenn Sie also die Aktivität durch Zurückgehen verlassen (z. B. durch Drücken der Zurück-Taste), wird OnSaveInstanceState und OnRestoreInstanceState nicht aufgerufen, wenn Sie die Aktivität erneut öffnen. Stattdessen sollten Sie Aktivitätsdaten in SharedPreferences oder sqlite oder file (sagen wir in der onStop() Methode) persistieren.

Verwandte Themen