私は、実行時にいくつかのJSONデータを読むタブを作成する単純なTabActivityを作成しました。現時点では、空のListActivityを各タブのダミーのランダム項目で初期化しています。タブからタブへの変更が機能し、内容が消えないことがわかります。タブの実際のコンテンツはシングルトンクラスに格納されているため、画面の向きが変更されたためにタブアクティビティが再作成されると、インテントの追加バンドルに含まれている識別子に従って、それぞれのリストから正しいダミーアイテムが取得されます。Androidの最初のタブアクティビティは永遠に生きているのはなぜですか?
すべて正常です。私はリストのアクティビティonCreateメソッドにログを記録して、画面の回転でアクティビティが再作成されるのを見ています。ただし、最初のタブのアクティビティが表示されていなくても、常に再作成されるという点では奇妙なことがあります。 3番目または4番目のタブに切り替えてデバイスを回転すると、最初のタブを除いて、以前のタブが強制終了され、再作成されません。最初のタブは常にそこにあります。どうして?私はコードのバグを理解するだろうが、タブのアクティビティはチュートリアルからコピーされ、リストのアクティビティはすべてのタブで同じです。ここで私が得るいくつかのログです:
List created with 1
onConfigurationChanged
List created with 1
List created with 2
List created with 4
List created with 5
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
List created with 6
onConfigurationChanged
List created with 1
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
onConfigurationChanged
List created with 1
List created with 2
List created with 4
onConfigurationChanged
List created with 1
List created with 4
onConfigurationChanged
List created with 1
List created with 4
List created with 5
onConfigurationChanged
List created with 1
List created with 5
onConfigurationChanged
List created with 1
List created with 5
あなたはログから見ることができるように、各リストの活動は、エキストラバンドルに入れた識別子を記録し、他にほとんど何もしません。アプリケーションが起動し、最初のタブが作成されたら、回転して他のタブに切り替えます。そのonCreateメソッドが呼び出されます。そして、ログは私がどのようにタブを切り替えて回転しているかを示します。どのタブが表示されているかによって、異なるアクティビティが再作成されますが、最初のタブが常に表示されます。
最初のタブはいつも再作成されますか?何らかの理由でこの特別な行動が必要ですか?私は、個々のタブを作成TabActivityのループの中でいくつかのより多くのログを入れている、と最初のタブが追加されたときにその活性があるように見えます:私は7
UPDATE HTC伝説のAPIレベルでこれを見ています常にが作成されました。これを避ける方法はありますか?おそらく、ダミーの空のタブを作成し、後に実際のアクティビティを入力しますか?その他のログ:
onConfigurationChanged
Tab: Saving tab index 3
...
Tab: Adding tab 1
List created with 1
Tab: Adding tab 2
Tab: Adding tab 3
Tab: Adding tab 4
Tab: Adding tab 5
Tab: Setting tab to index 3
List created with 5
私は、このオーバーヘッドのハックを避ける方法について誰かが考えているかどうかを知りたいので、これをお気に入りにしました。私が下に書き留めたものに加えて、パフォーマンスを助けるために空の目に見えない第1のタブを実装することを検討しています。 –
私はあなたのアイデアが見えないタブについて考えていたので、ダミーのアクティビティで実装しました。ダミーアクティビティにログを記録すると、デバイスの方向付け中にログが作成/破棄されていることがわかります。そのため、パフォーマンス上の理由から実行する価値があるようです。また、JSONが壊れている場合、ダミーのタブが常に存在するため、タブのアクティビティは空であるためクラッシュしません。アイデアをありがとう。 –
私たちはときどき考えなければならない回避策はありませんか?;) –