0

OS の kill/restore アクティビティ (またはアプリ?) に関連するバグがあります。

いくつかのデバッグの後、find if setdon't keep activitiesと set Background process limittono background processは異なる動作を引き起こします。

この投稿を見ましたが、ここでの質問には答えていません。

これが観察されたものです:

アプリケーションでは、短剣コンポーネントを開始し、いくつかのアプリ スコープ シングルトン オブジェクトを維持します。アクティビティ A (デフォルトの起動アクティビティ) では、ユーザーのアクションによってアクティビティ B を起動し、B ではフラグメントを作成してホストします。フラグメントを操作するために、アプリ スコープ シングルトン オブジェクトにいくつかのデータが格納されます。

セットのみの場合don't keep activities、アプリを最小化するとアクティビティ onDestroy() が呼び出され、アプリを再度開くと、最後のアクティブなアクティビティが復元されます (ユーザーがアクティビティ B を開いたとします。B は次のように再作成されます)。 savedInstanceState で復元されたフラグメント)。この場合、短剣によって管理されるアプリ スコープ シングルトン オブジェクトはまだ生きているため、状態はアプリを最小化する前の状態に完全に復元されます。

ただし、 と が両方ともdon't keep activitiesに設定さBackground process limitれているno background process場合、アプリを最小化すると、アクティビティの onDestroy() は呼び出されません (onStop() まで呼び出すだけです)。

動作の変更は、この時点でアプリを再度開くと、アプリケーションの onCreate() から開始され、短剣のコンポーネントが再作成されます。そのため、アプリを最小化する前の状態は復元されません。

しかし、OSは最後のアクティビティがBであり、Bのものであることをまだ覚えているようです

onCreate(savedInstanceState: Bundle?) 

アプリを最小化するときに保存されたデータを持つsavedInstanceStateで呼び出され、Bのフラグメントも同様です。

そして、それはめちゃくちゃで、savedInstanceState からのデータがありますが、アプリ スコープ シングルトン オブジェクトは、savedInstanceState からのものと連携するデータを持たない新しいものです。

この場合、savedInstance がどこに保存されているか、また、アプリケーションが再作成されたように見えても、最後のアクティビティ (起動アクティビティではない) が再保存されるのはなぜですか?

4

1 に答える 1