6

したがって、私のアプリケーション内には、新しいユーザーを作成するためのフォームがあり、ユーザーに関する詳細と情報が含まれています。問題はありません。ユーザーが確認ボタンを押さずにアクティビティを終了すると、問題が発生します。

これが私がやりたいことです:

  1. ユーザーが戻るボタンを押した場合は、すべてのデータをデータベースに保存して、ユーザーに通知してください。
  2. アクティビティが中断された場合(つまり、電話によって)、すべてのデータを一時的な場所に保存して、アクティビティが再びスタックの一番上にあるときに、何も変更されていないように見えるようにします(ただし、データはまだ保存されていません)データベースへ)。
  3. バックグラウンドでアクティビティがより多くのリソースのために強制終了された場合は、上記のポイント2と同じようにします(つまり、アクティビティが再開されたとき、何も変更されていないように見えます)。
  4. アプリケーション全体が(アイコンをもう一度クリックして)再起動し、上記のポイント2または3のいずれかから一時データが保存されている場合は、「ユーザーの作成」アクティビティに移動し、何も変更されていないかのようにデータを表示します。

これが私が現在それをやろうとしている方法です:

  • onDestroy()および関数を使用isFinishing()して、アクティビティがいつ強制終了されているかを確認し、上記のポイント1をカバーします(その後、すべてのデータを保存しようとします)。
  • すべてのデータをonSaveInstanceStateバンドルに保存します(上記のポイント2をカバーするため)
  • で作成されたバンドルは、onSaveInstanceStateより多くのリソースのために強制終了されたアクティビティを存続させるので、再作成されたときに前の状態を取得できますか(上記のポイント3のように)?
  • ポイント4を実装する方法がわかりません。

どんな助けでも大歓迎です。

乾杯!

4

2 に答える 2

4

私は時間が足りないので、完全な詳細な答えを出すことはできませんが、簡単に言えば、ここに私の提案があります。

  • を使用する代わりに、をonDestroy()使用してonPause()ください。それは呼ばれることが保証されています。ライフサイクルに関する公式ドキュメントによると、onPause()のみが保証されています。onStopとonDestroyはそうではありません。
  • onSaveInstanceStateとonPauseは似ています。どちらもアプリがフォアグラウンドを離れたときに呼び出されます(つまり、アプリが強制終了される可能性のある危険ゾーンに入る)が、oSISとの違いはアプリが提供する一時的なバンドルです。onPauseはデータストレージメカニズムを提供しませんが、データベースを使用している場合は、すでにデータベースを使用しています。ドキュメントによると、最初に呼び出される順序は保証されていません。
  • ポイント3)まさにそれがoSISの目的です
  • ポイント4)データベースに「一時行」を作成できます。つまり、一時データを行1に保存できますが、保存が適切に行われると、行1は空白になります。次に、onCreate()で、行1に実際のデータがあるか空であるかを確認します。(列を空にできない場合は、通常の使用の一部として表示されない、事前に決定されたプレースホルダー値を使用してください。)
于 2010-04-20T17:12:18.120 に答える
1

一時的な状態を保存するための統一されたメカニズムを作成することをお勧めします。バンドルの代わりに、Androidリファレンスで提案されているメカニズムのいずれかを使用できます

于 2010-04-20T17:12:33.673 に答える