0

ホームを押して少し後にアプリに戻ると、状態が完全に保存されていることがわかります。ただし、何らかの理由で電話をロックしてからロックを解除すると、アプリが元の状態バーに戻ってしまいます。ログを調べたところ、電話がロックされた状態で onCreate が呼び出されたことがわかりました。電話をロックするのは非常に手間がかかるため、ロックを行うたびにゲームがリセットされることは、ユーザーにとって望ましくありません。電話をロックした後、少なくとも数秒よりも長い間、これをどのように回避できますか?

4

3 に答える 3

2

これがAndroidOSの仕組みであり、ビューを破棄するタイミングを独自に決定します。この情報を失うことを避けるために、あなたの活動に再実装できる方法があります

@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);
}
于 2011-12-26T21:23:02.540 に答える
1

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

Android アクティビティ ライフサイクルを知っていますか? そうでない場合は、こちらをお読みください: Android アクティビティ

于 2011-12-26T21:15:43.447 に答える
0

画面ロック時の動作は、デバイスによって異なる場合があります。一部のイベントは、アプリの破壊を引き起こす可能性があります。AndroidManifest.xml で指定して、この状況を回避するために、このイベントのいくつかの処理を試みることができます。

android:configChanges="keyboardHidden|orientation"

この 2 つは、画面ロックで最も問題となるものです。このnvidiaドキュメントの最後の章で詳細を見つけることができます

于 2013-11-17T12:49:43.017 に答える