동일한 활동 내에서 OpenGLView 또는 AndroidGameView를 처리하고 다시 시작하려하지만 동일한 활동 내에 배치 된 후에 다른 시간에 게임을 시작할 수없는 것으로 보입니다. 다음은 모노 도이드 게임 샘플 프로젝트를 사용한 테스트입니다.Monodroid에서 OpenGLView를 삭제하고 다시 시작하십시오.
GLView1 view;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create our OpenGL view, and display it
//view = new GLView1(this);
//SetContentView(view);
Timer timer = new Timer(OnTimerDone, this, 3000, 3000);
}
void OnTimerDone(object state)
{
System.Diagnostics.Debug.WriteLine("timer");
((Activity)state).RunOnUiThread(() =>
{
if (view != null)
{
//view.Stop();
view.Dispose();
view = null;
SetContentView(null);
GC.Collect();
}
else
{
view = new GLView1((Activity)state);
//view.Resume();
SetContentView(view);
}
});
}
//protected override void OnPause()
//{
// base.OnPause();
// view.Pause();
//}
//protected override void OnResume()
//{
// base.OnResume();
// view.Resume();
//}
감사합니다. 나의 새로운 코드
업데이트는 재사용 된 setContentView을 피하기 위해 :
GLView1 view;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create our OpenGL view, and display it
//view = new GLView1(this);
//SetContentView(view);
SetContentView(Resource.Layout.Main);
Timer timer = new Timer(OnTimerDone, this, 3000, 3000);
}
void OnTimerDone(object state)
{
((Activity)state).RunOnUiThread(() =>
{
LinearLayout linearLayoutMain = ((Activity)state).FindViewById<LinearLayout>(Resource.Id.linearLayoutMain);
if (view != null)
{
System.Diagnostics.Debug.WriteLine("timer delete");
linearLayoutMain.RemoveView(view);
try
{
view.Stop();
view.Dispose();
view = null;
//SetContentView(null);
GC.Collect();
}
catch (Exception ex)
{
//Android.Util.Log.Debug("ex:", ex.ToString());
System.Diagnostics.Debug.WriteLine("ex:" + ex);
}
}
else
{
view = new GLView1((Activity)state);
view.Run();
//view.Resume();
//SetContentView(view);
linearLayoutMain.AddView(view);
System.Diagnostics.Debug.WriteLine("timer create");
}
});
}
무엇이 오류입니까? –
나는 어떤 에러도 내지 않는다 : GLView는 올바르게 폐기되지 않는다. 타이머가 예외를 두 번 내지 않고 두 번째로 멈췄 기 때문에 나는 생각한다! 또한 SetContentView를 다시 사용하지 않으려하지만 문제는 동일하게 유지됩니다. – Alphapage
이것은 어리석은 질문 일지 모르지만 Try/Catch 블록에 배치하여 예외 메시지를 출력 해 보았습니까? MonoTouch를 사용하여 가끔씩 런타임에서 삼키는 예외가 있기 때문에 때때로 그렇게해야한다는 것을 알았습니다. –