2017-04-07 3 views
0

私はバックグラウンドで多くの計算をする必要があるアプリケーションで作業しています。
これを行うには、フラグメントからスレッドを開始してハンドラを渡すので、メッセージを戻すことができます。設定が変更されると(画面回転、...)、Androidはアクティビティとフラグメントを再作成します。新しいフラグメントからスレッドへの参照を取得する方法を探しているので、新しいハンドラを渡すことができます。断片を保持せずにフラグメントデータを保持する

Fragment全体を保持することは、私にとってはオプションではありません。横向きモードで別のレイアウトを使用するためです。

私はonRetainNonConfigurationInstance()を使用できません。アクティビティでのみサポートされていますが、スレッドはフラグメント内に存在するためです。

私はonSaveInstanceState()を使用できません。これは基本データ型のみをサポートするためです。

フラグメントが再作成されたときに、バックグラウンドスレッドへの参照を保持する方法はありますか?

+0

これが役立つかどうかを確認してください。https://developer.android.com/reference/android/content/AsyncTaskLoader.html –

+0

@DavidKこれは、スレッドを使用している間にAsyncTaskを使用します。ドキュメントによると、AsyncTaskは「理想的には短い操作(数秒で数秒)に使用するのが理想的です」と言われていますが、アクティビティが実行されている間はスレッドは常に実行されます。 – freundTech

+0

ああ私はそれを知らなかった。次に、Executorなどの進行中のスレッドの1つをチェックします。あるいは、おそらくこれを扱うライブラリを探してみてください。確かに。 –

答えて

0

スレッドを管理するヘッドレス保持されたフラグメントを使用して問題を解決しました。

私の通常のフラグメントは、保持されているヘッドレスフラグメントの新しいインスタンスを作成します。ヘッドレスフラグメントは、start()stop()のメソッドを持ち、スレッドを開始して停止し、ハンドラメッセージを渡すメソッドを変更します。setHandler()
保持されていないフラグメントを再作成するたびに、保持されているフラグメントをFragmentManagerから取得し、新しいHandlerを使用してsetHandler()を呼び出すだけで済みます。

関連する問題