5

atmアプリを「onSaveInstanceState」と「onRestoreInstanceState」で動作させようとしていますが、深く掘り下げるほど、より多くの問題が発生します。

したがって、たとえば、これら2つの関数を介して1つのアクティビティを復元することは、まったく役に立たないことに気づきました。なぜなら、戻るボタンを押して前のアクティビティに戻ると、これは「savedInstanceState」バンドルを取得せず、代わりに完全に再作成されるためです。

単一のアクティビティだけでなく、アプリケーション全体を復元する方法はありますか?それとも、これは単なる奇妙なデザインであり、1つのアクティビティを復元することさえ気にしないでください。

よろしく、クラゲ

編集:わかりました、愚かな私...

私のメインアクティビティが取得したバンドルはnullではなく、「onRestore...」のみでした。「onCreate」では確かにnullでしたが、これは常に当てはまりました。(たとえば、殺した後に別のアクティビティから戻ったかどうかは関係ありません)

だから今、私は別の方法で混乱しています:私は以前に別のアクティビティでこれをテストしました、そしてそこで、「onCreate」と「OnRestoreInstanceState」のsavedInstanceStateバンドルは同じです!これは単なるランダムなものですか、それとも主な活動の特別なものですか?(さまざまな起動モードも試しましたが、影響はありませんでした)。

4

1 に答える 1

8

したがって、たとえば、これら2つの関数を介して1つのアクティビティを復元することは、まったく役に立たないことに気づきました。

いいえ、適切に使用すると非常に便利です。

なぜなら、戻るボタンを押して前のアクティビティに戻ると、これは「savedInstanceState」バンドルを取得せず、代わりに完全に再作成されるためです。

いいえ、そうではありません。

すでに存在し、バックスタックにある場合は、開始(onStart())および再開(onResume())されますが、作成されません。Androidが前のアクティビティを閉じる必要がある場合(たとえば、メモリ不足のため)、前のアクティビティが作成され( )、入力されたデータを含むデータonCreate()が渡されます。BundleonSaveInstanceState()

これらのステートメントが当てはまらない唯一の方法は、戻るボタンの処理を使用している場合です。

単一のアクティビティだけでなく、アプリケーション全体を復元する方法はありますか?

いいえ。

それとも、これは単なる奇妙なデザインであり、1つのアクティビティを復元することさえ気にしないでください。

間違いなく1つのアクティビティを復元する必要があります。

onSaveInstanceState()2つのシナリオで使用されます。

  1. ユーザーが構成を変更した場合(たとえば、画面を回転させた場合)、アクティビティは破棄されて再作成されます。onSaveInstanceState()古いアクティビティインスタンスから新しいアクティビティインスタンスにデータを渡すために使用します。
  2. 上で概説した戻るボタンのシナリオ。

私は以前に別のアクティビティでこれをテストしましたが、そこでは「onCreate」と「OnRestoreInstanceState」のsavedInstanceStateバンドルが同じです!

もちろん。それらは同じであるはずです。アクティビティが完全にゼロから作成されている場合、はonCreate()渡されnullonRestoreInstanceState()呼び出されません。ただし、インスタンス状態がある場合、その状態( )はとの両方にBundle渡されます。onCreate()onRestoreInstanceState()

これは単なるランダムなものですか、それとも主な活動の特別なものですか?

ない。それらは同じであるはずです。

于 2011-05-19T10:46:26.750 に答える