나는 (단순화 된)이 코드와 함께 게임을 통해 사용자의 진행을 저장하려고 시도한 몇 가지 게임 앱을 가지고 있습니다."강제 정지"와 전화를 몇 시간 만 쉬는 것의 차이
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();
}
}
"this"가 무엇입니까? get/save_state 함수는 언제 호출합니까? 당신은 당신의 활동의 onPause 메소드에 state를 저장해야한다. – Leonidos
"this"가 실제로 "Globals.this"라는 것을 알 수 있도록 원본 게시물을 편집했습니다. BTW, 나는 실제로 내 게임의 주요 활동의 onPause에서 save_state를 호출합니다. – Mick
Application 개체를 동기화에 사용할 수 있습니까? 안드로이드는 애플리케이션 객체를 사용하여 자신의 물건을 동기화 할 수 있습니다. 별도의 잠금 장치를 만들고 앱을 다시 테스트하십시오. 왜 당신은 전혀 동기화가 필요합니까? – Leonidos