2016-06-29 11 views
1

私が見る唯一の方法はstatic variableを使用することですが、複数を開始する能力を維持したいのでOKではありません。Activites画面の向きを変更してアクティビティでオブジェクト参照を保持する最善の方法

私の場合、Dagger 2 Componentの参照を保ちたいと思います。 Navigatorのようなオブジェクトを提供します。私はただそれをBundleに保存することはできません。

今のところ、私はこのためbugRetain MainFragment代わりにMainActivityを使用することはできません。(私は23 APIレベルでだ) があります任意のアクティビティの実装を保持しますか?

+0

オブジェクトをカスタム 'android.app.Application'に保存します – pskink

+0

@pskink私は既にDagger 2の' ApplicationComponent'をそこに保存しています:)今度はDagger 2の 'MainActivityComponent'を保持する場所が必要です。 'ApplicationComponent'はApplicationContextに依存します。 'MainActivityComponent'は' SupportFragmentManager() 'に依存します。 – Alexandr

+0

ローダの使用を検討したいですか?それらはアクティビティのライフサイクルからいくらか独立しており、状態を保持することができます –

答えて

1

えっ、よくあなたはこの問題解決するには、Androidでのソリューションに組み込まれた2持っている:オブジェクトがシリアライズされたり、onSaveInstanceState()をオーバーライドしてのonCreateで値を読み出すことができるparcelable場合

1)。詳細はgoogle developer docsです。

2)オブジェクトがシリアライズ可能でない場合は、代わりにonRetainNonConfigurationInstance()をオーバーライドしてそのオブジェクトを返すことができます。その後、オブジェクトをonCreateに戻すことができます。この方法を使用する方法についてはSO postを見てください(あなたの活動を維持しないでください!オブジェクトを永続させてください)。これの欠点は、一度に1つのオブジェクトしか永続化できないことです。

私は、これらの2つのアプローチの詳細を書き留めています。また、第3の宣言的アプローチは、ロールバックすることができます。 onRetainNonConfigurationInstanceに依存し、アノテーションを使用して、アクティビティ内のどの変数を永続化するかを宣言できます。 check it out here。つまり、シリアル化できない/継承可能なオブジェクトが複数存在しない限り、これを使用することはお勧めしません。

編集:onRetainNonConfigurationInstance()を使用して全体のアクティビティーを保持しないように注意してください。

+0

'onRetainCustomNonConfigurationInstance'は私が探しているものです。あなたの記事もとても役に立ちます。ありがとう:) – Alexandr

関連する問題