2013-01-17 1 views
0

나는 (단순화 된)이 코드와 함께 게임을 통해 사용자의 진행을 저장하려고 시도한 몇 가지 게임 앱을 가지고 있습니다."강제 정지"와 전화를 몇 시간 만 쉬는 것의 차이

public class Globals extends Application 
{ 
    public void onCreate() 
    { 
     settings = getSharedPreferences("MyPrefsFile", 0); 
    } 

    public void get_state() 
    { 
     synchronized (this) 
     { 
      game_progress = settings.getInt("progress", 1); 
     } 
    } 

    public void save_state() 
    { 
     synchronized (this) 
     { 
      SharedPreferences.Editor editor = settings.edit(); 

      editor.putInt("progress",game_progress); 

      editor.commit(); 
     } 
    } 
} 

이것은 99 %의 시간 동안 정상적으로 작동하지만 모든 경우 사용자의 진도가 손실되었다는보고가 있었지만 어느 누구도 나에게 다음 작업을 수행 할 수있는 일련의 작업을 제공하지 못했습니다. 지금까지 벌레를 반복해라. 단계는 "집"버튼을 눌러 프로그램을 종료 한 다음 몇 시간을 기다리는 것과 관련됩니다. 그런 다음 게임을 다시 실행하면 진행 상황이 사라집니다. 좌절하게이 순서는 짧아 질 수 없으며 몇 시간 동안 전화를 떠나지 않고 "힘 정지"를하면 같은 효과가 없습니다.

휴대 전화를 몇 시간 동안 방치하면 응용 프로그램 내의 일부 또는 모든 활동이 강제 종료와 약간 다른 방식으로 종료 될 수 있습니다. 그러나 어떻게되는지는 잘 모릅니다.

아이디어가 있으십니까?

편집 : 내 게임을 구성하는 다양한 활동에서 이러한 기능이 어떻게 호출되는지 설명해야합니다. 여기에 예제가 있지만 좋은 측정을 위해서 gs.save_state()를 다른 여러 곳에서 호출합니다.

public class Main_GamePlay extends Activity 
    { 
     Globals gs; 
     public void onCreate(Bundle savedInstanceState) 
     { 
      gs = ((Globals) getApplicationContext()); 
     } 
     protected void onPause() 
     { 
      gs.save_state(); 
     } 
    } 
+0

"this"가 무엇입니까? get/save_state 함수는 언제 호출합니까? 당신은 당신의 활동의 onPause 메소드에 state를 저장해야한다. – Leonidos

+0

"this"가 실제로 "Globals.this"라는 것을 알 수 있도록 원본 게시물을 편집했습니다. BTW, 나는 실제로 내 게임의 주요 활동의 onPause에서 save_state를 호출합니다. – Mick

+0

Application 개체를 동기화에 사용할 수 있습니까? 안드로이드는 애플리케이션 객체를 사용하여 자신의 물건을 동기화 할 수 있습니다. 별도의 잠금 장치를 만들고 앱을 다시 테스트하십시오. 왜 당신은 전혀 동기화가 필요합니까? – Leonidos

답변

0

이 경우에 무슨 일이 일어나고 있는지와 같은 적절한 순서가 안 될 수있다 메모리 당신이 집에 앱 가비지 콜렉터에 의해 회수되는 더 높은 우선 순위를 가지고 배경 상태로 이동합니다 눌러 .When 회수입니다. 따라서 공유 환경 설정 이외의 다른 방법으로 현재 상태를 저장해야합니다. 가능한 경우 현재 활동의 집을 언론에 저장해야 할 수도 있습니다.

희망이 무엇을 당신이 원하는지에 대한 간단한 생각을 제공합니다.