0

単純な整数や wot-not などを保存する方法はわかりますが、たとえば、メイン アクティビティがサービスとの通信である場合、作成した Handler インスタンスをクラス メンバーに格納します。そのような複雑なオブジェクトを保存するにはどうすればよいですか? サービスに連絡するにはどうすればよいですか? (おそらく、この質問の内容は私が本当に混乱していることを証明していますが、誰かが私をユーモアを交えてくれることを願っています:-)。

どうやら私は混乱をより明確にする必要があります。例を試してみましょう。次のように初期化されたクラスメンバーがあります。

private final Handler mHandler = new Handler() {...yadda, yadda};

メインアクティビティにメッセージを送り返すためにそれを使用しているサービスにそれを渡しました。(たとえば) 画面を回転させたときに、同じハンドラー インスタンスがアクティビティに残っているのはなぜですか?

から来た mTalkService クラス メンバーについても同様です。

new AardTalkerService(this, mHandler);

これはサービスそのものですが、状態の保存/復元後に mTalkService を使用できるのはなぜですか?

4

3 に答える 3

0

これをクラス フィールドにして OnCreate() メソッドで初期化すると、アプリケーションのほぼどこでも使用できます。

于 2012-06-27T21:50:18.790 に答える
0

本当にクールな方法(「クール」があなたにとって何を意味するかによって異なります;))これを行うには、android.app.Applicationから継承するクラスを作成し、そこにフィールドを追加します。そのため、アプリのどこからでもコンテキストを要求すると、このクラスのインスタンスが取得され、フィールドにアクセスできます。

(注::: これを機能させるには、カスタム実装をマニフェストに登録する必要があります。)

それ以外の場合は、単純で迅速で汚いものが必要な場合は、静的クラスを作成し、静的フィールドを作成して、サービスとアクティビティからアクセスします。(スレッド同期の問題に注意してください)

サービスとアクティビティが同じプロセスで実行される場合、ハンドラーの問題を経験する代わりに、アクティビティからサブスクライブできる単純なコールバックを取得したカスタム インターフェイスを使用できます。

于 2012-06-27T23:08:47.957 に答える
0

クラス メンバーへの直接アクセスは使用しないでくださいActivity。これは、アプリが最終的にクラッシュしてバーンすることを保証するのに十分な頻度で強制終了および再作成されるためです。

で登録し、で登録を解除するブロードキャスト レシーバまたはObservable/Observerパターンを使用して、だれもデッド に更新を送信しようとしないようにすることができます。ActivityObserveronRestore()onPause()Activity

于 2012-06-27T23:00:45.947 に答える