2011-12-26 9 views
0

家を押して私のアプリに戻ったら、少し後で状態が完全に保存されていることがわかります。しかし、何らかの理由で私が電話をロックしてからロックを解除すると、私のアプリは元の状態バーに戻ってきました。ログを調べると、電話がロックされた状態でonCreateが呼び出されたことがわかりました。電話をロックするのはかなり手間がかかりますので、そうするたびにゲームをリセットするのはユーザーにとって望ましくありません。電話をロックした後、少なくとも数秒間以上、これを避けるにはどうすればいいですか?Androidのロック画面の動作

答えて

2

これは、Android OSが動作する方法です。これは、自分のビューを破棄する時期を決定します。あなたの活動

@Override 
public void onSaveInstanceState(Bundle outState){ 
    iGameContent.saveGame(outState); 
} 

保存outStateにすべての必要なデータで再実装することができます方法があり、この情報を失うことを避ける、とのonCreateメソッドでは、このように、その場合は、新しいインスタンスまたは保存されたインスタンスを確認するには:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game); 

    if (savedInstanceState!=null){ 
     iGameContent.loadGame(savedInstanceState); 
    }else{ 
     // Normal initialization 
    } 
} 

バンドルへの保存/負荷の例は、次の画面ロックに

public void loadGame(Bundle aBundle){ 
    iBadsHit = aBundle.getInt("iBadsHits",0); 
} 

public void saveGame(Bundle aBundle){ 
aBundle.putInt("iBadsHit", iBadsHit); 
} 
+0

長期保存(例:ハイスコア)や短期(例:最後のレベルの再生)について話していますか? – Jack

+0

いいえ、短期間。アプリを閉じると、バンドルはクリアされます。 onSavedInstanceStateシステムがアプリを殺していないように見えます – Corbella

+0

このバンドルにあるクラスのすべての変数を書き込むだけで、バックグラウンドや向きが変わったときに復元されます。しかし、アプリケーションを起動するときではない – Corbella

1

ログにonCreateが呼び出されたことが表示されている場合は、アプリプロセスが終了したことを意味します。

あなたはAndroid Activity Lifecycleを知っていますか?そうでない場合は、ここでそれを読んでください:Android Activities

+0

はい、私はそれほど多くはないと思いますが、携帯電話がロック画面で自分のプロセスを一貫して殺しますが、まだ他のもののために使用されています。また、スプラッシュ画面が再び表示されないので、プロセスを完全に終了させることはできません。 – Jack

+0

また、自宅を押してロックすることができ、状態が完全に保持されるということは奇妙です。 – Jack

+0

それは殺されていない。私はあなたのゲームが横長の向きになっていると思いますよね?もしそうなら、私の答えのリンクに説明されているようにゲームの状態を維持するだけです。しかし、次回起動時にユーザーがHomeを押してゲームを再開させたくない場合は、とにかくこれを実行する必要があります。 – C0deAttack

0

現象が一つのデバイスから他方に変化し得ます。いくつかのイベントは、アプリケーションの破壊を引き起こす可能性があります。あなたはのAndroidManifest.xmlでそれを指定して、このような状況を避けるために、このイベントの一部を処理しようとすることができます:

android:configChanges="keyboardHidden|orientation" 

これら二つは、画面ロックの中で最も問題となっています。この最後の章の詳細については、こちらをご覧ください。nvidia document

関連する問題