1

のチャットクライアントを構築していますAndroid ICS。チャットアクティビティにつながる可能性のある名簿(連絡先)アクティビティがあります(名簿(連絡先)リストのエントリをクリックした後)。次に、チャット画面にあるボタンをクリックすると、チャットして名簿画面に戻ることができます。

インテントを作成するためのコードでアクティビティを開始するために使用されるフラグは次のとおりです。Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

名簿アクティビティ画面には検索ボタンもあり、アクティビティを検索してチャットアクティビティに移動できます。

ここで使用されるフラグは同じです。3つすべてがsingleTaskです。

問題は、名簿アクティビティからチャットアクティビティに移動してから、名簿アクティビティに戻ると、すべてが正常になることです。しかし、名簿アクティビティから検索アクティビティ、チャットアクティビティ、名簿アクティビティに戻ると、名簿アクティビティが再作成されます。つまりoncreate()、名簿の関数が呼び出されます。これは他のフローでは発生しません。

誰でもこれを説明できますか?検索用の新しいアクティビティを作成することは評価されないかもしれませんが、それが良いと仮定すると、これが発生する理由はありますか?

またondestroy()、名簿の活動は呼び出されません(強制ではないため)。

4

1 に答える 1

2

再開した後、または別の画面からアクティビティに戻った後は、いつでもonCreateが呼び出されることを常に期待する必要があります。Androidは、一時停止されている、つまりユーザーから隠されているアクティビティを終了することを選択できます。そのアクティビティに戻ると、それが破棄された場合、AndroidはonCreate(およびonRestoreInstanceStateを呼び出すことによってアクティビティを再作成します。そのため、onRetainInstanceStateのコンテキスト変更よりも長持ちするはずの揮発性データを保存する必要があります)。

この動作について馬鹿げたことは何もありません。Androidのアクティビティライフサイクルの一部として十分に文書化されています。

于 2012-09-27T11:49:31.637 に答える