Android - guardar datos cuando la aplicacion corre en segundo plano

   
Vista:

guardar datos cuando la aplicacion corre en segundo plano

Publicado por ded (1 intervención) el 11/08/2015 18:20:22
como guardar VARIOS datos cuando la aplicacion queda en segundo plano en android.
Es una activity que instancia a un surfaceview y quiero recuperar los datos de la surfaceview cuando la aplicacion regresa a primer plano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

guardar datos cuando la aplicacion corre en segundo plano

Publicado por Fernando (1 intervención) el 15/08/2015 15:29:24
Hola Ded. La solución que adopté, y no sé si es la óptima porque es la primera vez que utilizo SurfaceView, fue guardar los datos en un objeto FragmentManager:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class MainActivity extends AppCompatActivity     {
 
    private mcSFView moView;
    private mcSFView.mcThread moThread;
    private mcRestoreGame moRestoreGame;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_main);
        moView = (mcSFView)findViewById(R.id.viewBoard);
        FragmentManager fm = getFragmentManager();
        moRestoreGame = (mcRestoreGame) fm.findFragmentByTag("DataGame");
        if (moRestoreGame == null) {
            moRestoreGame = new mcRestoreGame();
            fm.beginTransaction().add(moRestoreGame, "DataGame").commit();
        }
    }
 
    @Override
    protected void onResume() {
        super.onResume();
 
        moThread = moView.setThread();
        if (moRestoreGame.getData()==null) {
            moThread.setMaxPoints(getGameType());
            moThread.setDifficultyLevel(getGameDifficulty());
            moThread.setPlayerName(getPlayerName());
            moThread.doStart();
        } else {
            moThread.moGame = moRestoreGame.getData();
            moThread.setMaxPoints(getGameType());
            moThread.setDifficultyLevel(getGameDifficulty());
            moThread.setPlayerName(getPlayerName());
            moThread.restoreState();
        }
        moThread.setRunning(true);
        moThread.start()
    }
 
    @Override
    protected void onPause() {
        super.onPause();
 
        moRestoreGame.setData(moThread.moGame);
        moView.getThread().pause();
    }

Y la clase para el Fragment:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class mcRestoreGame extends Fragment {
 
    private mcGame moData;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setRetainInstance(true);
    }
 
    public void setData(mcGame oData) {
        moData = oData;
    }
 
    public mcGame getData() {
        return moData;
    }
}

En este caso tengo todos los datos que necesito conservar en un objeto del Thread y los recupero en OnResume y/o leo los cambios en las preferencias a la vez que se vuelve a crear el Thread.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar