すべてのデータがメモリから読み取られるか、新しいデータが設定されるとすぐに、onSaveInstanceState が呼び出されます。各関数の先頭に Log.e 呼び出しを配置して、onSaveInstanceState が呼び出される直前に何が呼び出されるかを確認しました。
プログラムが終了する原因は何ですか? ロック解除ボタンを移動できるようにするために、電源ボタンをクリックする必要がある場合もあれば、電源ボタンを押さなくても移動する場合もあります。
Eclipseを使用してテストします。シミュレーターで動作し、電話でクラッシュします。
他に何を追加すればよいかわかりません。
GC_EXTERNAL_ALLOC 1K 解放、45% 解放
3339K /6023K、外部 5407K/6752K
、
一時
停止
87ms
zlib を inflate に
初期化しています inflate状態を
初期化しています zlib を inflate に
初期化しています inflate 状態を初期化しています zlib を inflate に
初期化しています inflate 状態を
初期化しています
zlib を inflateに初期化しています
GC_EXTERNAL_ALLOC解放
5K 、45% 解放
3344K /
6023K
、外部
7110K
/7462K、
一時
停止
81ms zlib to inflate
inflate 状態の
初期化 zlib の inflateの
初期化 inflate 状態の
初期化 zlib の inflateの
初期化 inflate 状態の
初期化 zlibの inflate の初期化
インフレ状態の初期化 インフレへの zlib の初期化 インフレ状態の初期化 インフレへの
zlibの
初期化 インフレ
状態
への
初期化
zlib
への
初期化 インフレ
状態への初期化 インフレへの
zlibの初期化 インフレ
状態への初期化
インフレへの zlib の初期化/6023K、外部 7982K/8032K、一時停止 106ms インフレ状態の
初期
化
zlib を初期化してインフレート中 インフレ状態を初期化中 zlib を初期化してインフレート中
インフレ状態の
初期化 zlib をインフレートに
初期化中
インフレ状態を初期化中 zlib をインフレートに初期化中
インフレ状態を
初期化中 zlib をインフレートに初期化中 インフレ状態を初期化中 インフレ状態を初期化中 zlib をインフレートに初期化中 インフレ
状態を
初期化中 zlib
をインフレートに
初期化中
私にはある種のループのように見えます
@Override
public void onSaveInstanceState(Bundle outState)
{
//Store the game state
Log.e("onSaveInstanceState", " public void onSaveInstanceState");
// ?? replace
// ?? is called when answer phone button is pushed
// ?? is called when red phone button is pushed
// ?? is called when house button is pushed
// ?? is called when power button is pushed
// ?? "outState.putBundle" does not seem to do anything
outState.putBundle(m_MyView.GetFileName(),
m_MyView.m_prRecord.SaveBundleData());
}
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try
{
Log.e("onCreate", "onCreate");
//Debug.startMethodTracing("calc");
//System.gc();
setContentView(R.layout.main_Layout);
PopupWindow popup = new PopupWindow(
this.getLayoutInflater().inflate(R.layout.menu_layout, null));
m_MyView = (CMyView) findViewById(R.id.main);
m_MyView.SetTextView((TextView) findViewById(R.id.text));
Log.e("onCreate", "savedInstanceState == null " + (savedInstanceState == null));
m_MyView.SetPopup(popup);
// [breaks code]
//popup.setContentView((CMenu) findViewById(R.id.menuView));
if(savedInstanceState != null)
{
LoadBundleData(savedInstanceState);
}
else
{
try
{
// ?? check if we have a saved file
InputStream fis = new FileInputStream(m_MyView.GetFileName() );
Log.e("onCreate", "fis == null " + (fis == null));
// ?? if fis == null then exception is thrown
// ?? if statement is used to remove unused variable error
if(fis != null)
{
if(m_MyView.m_prRecord.LoadByteData(
m_MyView.GetFileName()) == false)
{
Log.e("onCreate", "new");
// ?? all data was not loaded
m_MyView.SetMode(CMyView.NEW);
return;
}
else
{
Log.e("onCreate", "got here");
m_MyView.SetMode(CMyView.READY);
return;
}
}
// ?? if(fis == null) is dead code
/*else
{
//Log.e("onCreate", "fis == null");
m_MyView.setMode(CMyView.NEW);
}
*/
}
catch(Exception e)
{
//Log.e("onCreate", "Exception 1");
// We were just launched -- set up a new game
// ?? which means we need to make a Stream file to write to
//Log.e("onCreate", "ERROR IN public void onCreate: " +
// e.toString());
e.printStackTrace();
m_MyView.SetMode(CMyView.NEW);
}
}
//Debug.stopMethodTracing();
}
catch (Exception e)
{
//Log.e("onCreate", "Exception 2");
// this is the line of code that sends a real error message to the log
//Log.e("ERROR", "ERROR IN public void onCreate: " + e.toString());
// this is the line that prints out the location in
// the code where the error occurred.
//e.printStackTrace();
}
}
}
今、私は完全に混乱しています。追加した:
@Override
public void onResume()
public void onRestart()
public void onRestoreInstanceState(Bundle savedInstanceState)
with this inside:
{
super.onResume();
Log.e("onResume", "enter");
}
onResume が呼び出されますが、onSaveInstanceState は呼び出されません。
?? 3つの関数をオーバーライドしてパススルーすると、別の関数が呼び出されないようにするにはどうすればよいですか?
?? さらに2回実行すると、onSaveInstanceStateがonResume後に表示されました。onResume -> onSaveInstanceState -> onPause -> onDraw