2011-02-06 17 views
0

私はAndroid Widget、設定アクティビティ、機能が豊富なAndroidサービスを大量に使用しています。上記のいずれかの場所から参照できるグローバルなアプリケーションの状態/ステータスを維持したい。私が言及しているのは、アプリケーションドメイン固有の状態です。たとえば、STARTED、LEVEL1、LEVEL2などです。Android Widgetアプリケーションの状態

1)この状態/ステータスを維持してサブクラス化するためのグローバルシングルトンの利点は何ですか? Androidアプリケーションをシングルトンとして使用する?

2)私は状態を回復可能なシングルトンにします。だから、アプリケーション がシャットダウンし、プロセスが終了したときにそれを保存する必要があります。アプリケーション全体の状態を保存する適切な場所はどこですか? Applicationのterminateメソッドはオーバーライドできますが、実際に呼び出される保証はありません。だから私はアプリケーションの状態を保存するためのポイントも探しています。それは私には分かりません。アクティビティはグローバルアプリケーションではなく、ウィジェットとサービスのどちらもないので、アプリケーションがシャットダウン/終了されてアプリケーションの状態が保存されていることをどこから通知できますか?

3)Application.onStart()で状態を初期化すると何か問題はありますか?

+0

いいえApplication.onStart() – techiServices

+0

私はApplication.onCreate()を参照していました – Androider

答えて

0

なぜサービスを使用しないのですか?それはライブ状態を維持するのに適した場所です。 AFAIKは、Serviceがシングルトンであり、onCreate()やonStartCommand()が初期化に適した場所を提供することを保証しています。私はonDestroy()が呼び出されるという保証は不明ですが、ドキュメントでは次のように書かれています:

"サービスは開始され、接続がバインドされている可能性があります。サービスが起動されているか、Context.BIND_AUTO_CREATEフラグで1つ以上の接続が存在するかぎり、サービスが実行されています。これらの状況がいずれも保持されないと、サービスのonDestroy()メソッドが呼び出され、 ref

+0

最初の質問は本当にカスタムアプリケーションの状態が存在するはずです。あなたのアプリがn個のサービスを持っているとします。あなたはそのようなサービスの1つを共有状態を保ったものにしますか?私はそうは思わない。一般的な1アプリ、nサービス、yウィジェットを取る。このアプリケーションのこの共有状態は実際にアプリケーションに属し、そのコンポーネントのどれも正しくないようです。 – Androider

+0

これは、保存するだけでなく共有することに留意してください。どこにいてもどこにでも保存できますが、これは同期共有を提供しません。論理的にもそれは好みではない。 – Androider

+0

>そのようなサービスの1つを共有状態にしたサービスにしますか?私はそうは思わない。何故なの?ドキュメントによると、「サービスとは、アプリケーションが長時間実行される操作を実行したいというアプリケーションの要求で、他のアプリケーションが使用する機能を提供することを表します。これはシングルトンで、長時間実行され、他のコンポーネントや他のアプリケーションにも利用可能です。 "カスタムアプリケーションの状態を保持する(そして維持する)準備ができている自然なコンポーネントタイプと思われます。 – DJC

0

1)この状態/ステータスを維持してAndroidアプリケーションをサブクラス化してシングルトンとして使用すると、グローバルシングルトンのメリットは何ですか?

"グローバルシングルトン"とは、静的なデータメンバーを意味しますが、どちらの意味でもメリットまたはデメリットはありません。

2)状態を回復可能なシングルトンにしたい。だから私は、アプリケーションがシャットダウンされ、プロセスが終了するときにそれを保存する必要があります。アプリケーション全体の状態を保存する適切な場所はどこですか?

いつも変わる、多かれ少なかれ。

アクティビティはグローバルアプリケーションではなく、ウィジェットとサービスのどちらもないため、アプリケーションがシャットダウン/終了してアプリケーション状態を保存することはどこから通知できますか?

あなたは聞かれません。したがって、変更するたびに保存します。静的データメンバー、Applicationオブジェクト、または永続データ用のキャッシュであれば、他のすべては完全破壊になります。 (悪魔の笑いをここに入れてください)

3)Application.onCreate()の状態を初期化すると何か問題がありますか?(修正済み)

onCreate()とします。あなたはメインのアプリケーションスレッド上にあるので、I/OはonStart()で開始されるかもしれませんが、AsyncTaskまたは他のバックグラウンドスレッドで発生する必要があります。

+0

3)correct私はonCreate – Androider

+0

を参照していました。3)システム値を取得するためにregisterReceiver(null、Intent)を実行することによって、初期化の参照の一部が取得されます。これはonCreateにANRの範囲内で収まるでしょうか?あるいは、初期化リクエストIntentをサービスに渡すのがより理にかなっていますか? – Androider

+0

@Androider: 'registerReceiver()'はマイクロ秒を要し、問題ではありません。 – CommonsWare

関連する問題