Android commitAllowingStateLoss と commit() スイッチング フラグメントの違い

commit()と は、commitAllowingStateLoss()Android の FragmentManager で FragmentTransaction を送信するために使用される 2 つのメソッドです。それらの主な違いは、「状態損失」の処理方法です。

  1. commit() : このメソッドがトランザクションをコミットするときに、状態が保存されている場合 (つまり、アクティビティの onSaveInstanceState() メソッドが呼び出されている場合)、例外がスローされます。これは、FragmentManager が状態の保存後にトランザクションのロールバック スタックを保存するため、状態の保存後にトランザクションがコミットされた場合、トランザクションはロールバック スタックに保存されません。これにより、アプリが状態を復元するときに状態が不整合になる可能性があります。

  2. commitAllowingStateLoss() : このメソッドを使用すると、状態が失われる場合でも、状態が保存された後にトランザクションをコミットできます。状態損失の例外はスローされませんが、状態が保存された後にトランザクションがコミットされた場合、トランザクションはロールバック スタックに保存されないため、アプリケーションが状態を復元するときに状態の不整合が発生する可能性があります。

一般に、状態を保存した後はトランザクションをコミットしないようにする必要があります。これにより、アプリケーションのユーザー インターフェイスの状態が実際のアプリケーションの状態と一致しない可能性があります。commitAllowingStateLoss()ただし、特定の状況下でアプリが UI 状態の喪失を許容できる場合など、場合によっては を使用することもできます。

おすすめ

転載: blog.csdn.net/mp624183768/article/details/130863398